栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11的内联命名空间(inline namespace)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11的内联命名空间(inline namespace)

    在c++11后 一个namespace (子命名空间)可以通过inline 修饰,将其中的函数和类型export到其外层的namespace(父命名空间)中,并且这种export是可以传递的。

    这个特性能够支持一些有意思的实现,比如在接口功能升级的时候可以实现无需用户改动接口的调用直接默认使用新功能接口的神奇效果。

#include 

namespace MyClassSpace {
    namespace ClassASpace {
        class A {
            public:
            int m_a = 0;
        };
    }

    inline namespace ClassBSpace {
        class B {
            public:
            int m_b = 0;
        };
    }

    inline namespace ClassCSpace {
        class C {
            public:
            ClassASpace::A a;
            B b;
            void func(void) {
                std::cout << "classA::a.m_a = " << a.m_a << "; classB::b.m_b = " << b.m_b << std::endl;
            }
        };
    }
};

namespace TransGrandParent {
    inline namespace TransParent {
        inline namespace TransSun {
            void trans(void) {
                std::cout << "TransSun::trans()" << std::endl;
            }
        }
    }
}

namespace FuncSpace {
    namespace V100 {
        void func(void) {
            std::cout << "V100" << std::endl;
        };
    }

    namespace V101 {
        void func(void) {
            std::cout << "V101" << std::endl;
        };
    }

    inline namespace V102 {
        void func(void) {
            std::cout << "V102" << std::endl;
        };
    }
};

int main(int argc, const char** argv) {

    
    MyClassSpace::ClassCSpace::C c;
    c.func();

    
    TransGrandParent::TransParent::TransSun::trans();
    TransGrandParent::TransParent::trans();
    TransGrandParent::trans();

    
    FuncSpace::V100::func();
    FuncSpace::V101::func();
    FuncSpace::func();

    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/868997.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号