c++ - 在 C++11 中没有开销的别名模板最佳替代方案的专业化
问题描述
我知道不可能专门化别名模板。
事实是,我经常发现以下重复出现的模式:
template<class Code, Code code>
struct BaseStruct;
enum MyCode {A,B,C};
template<MyCode code>
using MyStruct = BaseStruct<MyCode, code>;
template<> // Error not possible
struct MyStruct<MyCode::A>
{
};
template<> // Ok but too long to write
struct BaseStruct<MyCode, MyCode::A>
{
};
有时我必须编写许多特化,并且BaseStruct
可以有其他模板参数或者可能有一个长名称,所以理想的做法是使用别名然后对其进行特化。
大家遇到这种情况怎么办?我宁愿不使用宏或其他引入开销的方法。
PS我正在使用c ++ 11
解决方案
[评论太长了]
根据您的用例,继承而不是别名模板可能会起作用,但是从您的玩具示例中很难说。
template<class Code, Code code>
struct BaseStruct;
enum MyCode {A,B,C};
template<MyCode code>
struct MyStruct : BaseStruct<MyCode, code> {};
template<> struct MyStruct<MyCode::A> {};
template<> struct MyStruct<MyCode::B> {};
template<> struct MyStruct<MyCode::C> {};
推荐阅读
- javascript - 播放/暂停 HTML 音频在 iOS 上不起作用
- hive - 如何从数组中获取第一个非空元素
在蜂巢 2.2.0 - json - 有没有比 dangerouslySetInnerHTML 更好的方法来使用 React 对 HTML 实体/代码进行编码?
- python - 从 Ros 中的 CSV 文件填充 Numpy 数组
- google-cloud-platform - 如何从 IAM api 设置服务帐户权限
- php - Woocommerce 在单个产品页面中显示含增值税和不含增值税的价格?
- ios - 我应该削弱块中使用的“局部”变量吗?
- javascript - 如何删除 JSON Array 父级并保留子 json 数组
- angularjs - 如何在 angularJS 中将羽毛笔编辑器的文本字符限制限制为最多 5000 个字符?
- visualization - 如何在 R 中为两个变量实现斜率图