命名空间中所有类的类模板专门化

时间:2014-01-01 10:50:21

标签: c++ c++11

有没有办法专门化使用单个参数的类模板 第二个图书馆的课程。 第一个图书馆(Poco)是,但是 可以修改第二个库中的类。

#include <iostream>

namespace FirstLibrary {
    template <typename T>
    struct TypeHandler
    {
        static void apply() {
            std::cout << "First Library" << std::endl;
        }
    };
}

namespace  SecondLibrary {
    template <typename T>
    struct TypeHandler {
        static void apply() {
            std::cout << "Second Library" << std::endl;
        }
    };

    struct Type {};
}


namespace FirstLibrary {
    // This is invalid code:
    // template <typename T>
    // struct TypeHandler<T> : SecondLibrary::TypeHandler<T>
    // {};

    // This is valid and suggested code I like to avoid typing over and over again:
    template<>
    struct TypeHandler<SecondLibrary::Type> : SecondLibrary::TypeHandler<SecondLibrary::Type>
    {};
}


int main() {
    FirstLibrary::TypeHandler<SecondLibrary::Type>::apply();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果您想保存一些输入内容,可以使用using作为:

namespace FirstLibrary {
    // use the one you prefer:
    using SecondLibrary::Type;
    //using namespace SecondLibrary;


    template<>
    struct TypeHandler<Type> : SecondLibrary::TypeHandler<Type>
    {};
}
必须指定

SecondLibrary::TypeHandler,否则TypeHandler将引用FirstLibrary::TypeHandler

类似的方法是使用名称空间别名

namespace FirstLibrary {
    namespace SL = SecondLibrary;

    template<>
    struct TypeHandler<SL::Type> : SL::TypeHandler<SL::Type>
    {};
}