有没有办法专门化使用单个参数的类模板 第二个图书馆的课程。 第一个图书馆(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;
}
答案 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>
{};
}