c++ - 部分模板专业化
问题描述
我正在尝试专门化以下模板类的构造函数
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> {};
有人可以指出我正确的方向吗?谢谢!
解决方案
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>>;
推荐阅读
- python - 为什么python无法识别字符串何时在文件中
- php - PHP在更新前检查图像
- html - Selenium - 获取链接的策略是什么?
- php - 如何在 php 中使用 sql 更新 2 个表?
- python - sqlalchemy.exc.IntegrityError:唯一约束失败
- sql - 限制在 PostgreSQL 上创建用户的访问权限
- visual-studio-code - 如何在 VS Code 中轻松编辑 Jupyter 笔记本的 JSON 代码?
- javascript - 将重复值推入新数组
- algorithm - 不同的参数如何影响时间复杂度的大 O 表示法
- spring-boot - 使用 ReplyingKafkaTemplate 时 ProducerRecord 的回复超时