部分模板专业化

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>>;