首页 > 解决方案 > 部分模板专业化

问题描述

我正在尝试专门化以下模板类的构造函数

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

有人可以指出我正确的方向吗?谢谢!

标签: c++templatestemplate-specialization

解决方案


template 的第二个参数test只接受一个类型(like 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>>;

推荐阅读