部分模板专业化
Partial template specialisation
我正在尝试专门化以下模板化的构造函数 class
enum class A { a1, a2 };
enum class B { b1, b2 };
template<typename A, typename B>
class test
{
public:
test(A a, B b) {}
};
我如何专门化构造函数以获取 B 的 特定 值,例如 B::b1?我以前没试过这个,下面的也行不通。
template<typename A>
class test<A, B::b1> {};
有人能给我指出正确的方向吗?谢谢!
模板的第二个参数test
只接受一个类型(如B
),而不是值 (B::b1
)。 test<A, B::b1>
总是格式错误的,无论你做什么来专门化 test
。
但是,您可以构建从值到类型的映射,例如:
enum class A { a1, a2 };
enum class B { b1, b2 };
template<typename A, typename B>
class test{
public:
test(A a, B b) {}
};
template<typename T, T v>
class tag{};
template<typename A, typename T, T v>
class test<A, tag<T, v>>{};
using example = test<A, tag<B, B::b1>>;
我正在尝试专门化以下模板化的构造函数 class
enum class A { a1, a2 };
enum class B { b1, b2 };
template<typename A, typename B>
class test
{
public:
test(A a, B b) {}
};
我如何专门化构造函数以获取 B 的 特定 值,例如 B::b1?我以前没试过这个,下面的也行不通。
template<typename A>
class test<A, B::b1> {};
有人能给我指出正确的方向吗?谢谢!
模板的第二个参数test
只接受一个类型(如B
),而不是值 (B::b1
)。 test<A, B::b1>
总是格式错误的,无论你做什么来专门化 test
。
但是,您可以构建从值到类型的映射,例如:
enum class A { a1, a2 };
enum class B { b1, b2 };
template<typename A, typename B>
class test{
public:
test(A a, B b) {}
};
template<typename T, T v>
class tag{};
template<typename A, typename T, T v>
class test<A, tag<T, v>>{};
using example = test<A, tag<B, B::b1>>;