为具有不同模板参数的模板部分专门化模板类
Partially specialize template class for templates with different template parameters
如何让一个类模板接受另一个可能具有两个不同参数列表之一的类模板?即,一个非类型参数或一个类型和非类型参数:
template <int X>
struct Foo1{};
template <typename T, int X>
struct Foo2{};
我希望能够将这些模板中的任何一个传递给我的模板(加上未来跟随它们的模板)。我希望这能说明我想要什么,尽管语法都错了:
template <typename T, int X, class>
struct Magic; //Don't accept non template parameters
template <typename T, int X, class <int> class C>
struct Magic<T, X, C> {}; //Template non-type
template <typename T, int X, class <class, int> class C>
struct Magic<T, X, C> {}; //Template type and non-type
我想不出为这些写一篇专门文章的方法。如果不可能的话,我可以只使用Foo1
,所有类似的模板都有一个什么都不做的模板类型参数(template <typename, int X> Foo1{};
),并考虑到这一点来编写Magic
,但我希望有一个更优雅的解决方案。
您可以应用的一个解决方案是为每个不同的类模板的声明引入包装器,并根据包装器包装的内容专门化神奇的结构。最终,您只需要知道哪个包装器与哪个类模板相关联。
template <int X>
struct Foo1{};
template <typename T, int X>
struct Foo2{};
template <template <int> class C> struct W1;
template <template <class, int> class C> struct W2;
template <typename T, int X, class>
struct Magic; //Don't accept non template parameters
template <typename T, int X, template <int> class C>
struct Magic<T, X, W1<C> > {}; //Template non-type
template <typename T, int X, template <class, int> class C>
struct Magic<T, X, W2<C> > {}; //Template type and non-type
int main()
{
Magic<int, 1, W1<Foo1> > m1;
Magic<int, 2, W2<Foo2> > m2;
}
DEMO
相关文章:
- 是否可以对零模板参数进行模板专门化
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 如何将部分流作为参数传递
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- 尝试根据类中 typedef 的存在来专门化模板函数
- HDF5Cpp 扩展复合数据集超板问题
- 如何基于模板化类的基类专门化成员函数
- 如何为指向复杂值的迭代器专门化算法?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 专门化模板覆盖函数/避免对象切片
- 我能否根据其运算符()的签名专门化可变参数模板参数
- C++剪贴板队列粘贴随机结果?
- 将缓冲区复制到剪贴板 [换行错误]
- 如何使用模板化类专门化模板化函数?
- 如何删除部分类?
- 线程 std::调用未知类型,无法专门化函数错误
- 输入两个不专门化大小的矩阵
- 如何制作板1[{1,1}]='X';大学工作
- wxWidgets mac剪贴板在3.1.3上坏了?
- 部分类专门化只是编写完全专门化的另一种方式吗?