具有多个参数的模板化类专用化,其中一个模板参数是模板本身
Templated class specialization with multiple arguments where one template argument is a template itself
我认为最简单的方法是显示一些代码:
template<typename T>
struct TemplateTest { //<-- generic version
using typeGeneric = int;
};
template<>
struct TemplateTest<std::vector<int>> { //<-- specialized with specialized version of vector
using typeVectorInt = int;
};
template<typename T>
struct TemplateTest<std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};
int main (int argc, char** argv) {
typename TemplateTest<int>::typeGeneric var1;
typename TemplateTest<std::vector<int>>::typeVectorInt var2;
typename TemplateTest<std::vector<char>>::typeVectorT var3;
return 0;
}
这工作正常且符合预期。由于我在不同的专业中使用了不同的使用名称,如果在编译过程中选择了预期的专用,则会出现编译错误。(我这样做只是为了这篇文章来显示问题(
但是,这没有按预期工作:
template<typename Tfirst, typename Tsecond>
struct TemplateTest { //<-- generic version
using typeGeneric = int;
};
template<typename Tfirst>
struct TemplateTest<Tfirst, std::vector<int>> { //<-- specialized with specialized version of vector
using typeVectorInt = int;
};
template<typename Tfirst>
template<typename T>
struct TemplateTest<Tfirst, std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};
int main (int argc, char** argv) {
typename TemplateTest<int, int>::typeGeneric var1;
typename TemplateTest<int, std::vector<int>>::typeVectorInt var2;
typename TemplateTest<int, std::vector<char>>::typeVectorT var3;
return 0;
}
var3 是问题所在。向量专用化不起作用(不是编译器选择的(,我不知道为什么。可以这样做吗,如果可以,如何做到?
谢谢!
您正在用错误的语法声明第二个专用化(使用无关的模板参数列表(;将其更改为
template<typename Tfirst, typename T>
struct TemplateTest<Tfirst, std::vector<T>> { //<-- specialized with generic version of vector
using typeVectorT = int;
};
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何制作一个将函数作为参数的类方法
- 修改函数中的指针(将另一个指针作为参数传递)
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 构造函数在退出函数时无法初始化一个参数
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- visual是否可以在c++中创建一个接收无限数量相同类型(或至少相当数量)参数的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 运算符重载:"operator+"必须采用零个或一个参数
- 是否可以在C++中有一个"generic"模板参数,该参数可以是非类型模板参数或类型?
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 如何在另一个函数中使用返回值作为参数?
- 如果模板参数是另一个模板的实例化,则键入特征测试
- 将参数一个接一个地传递,或通过将它们包裹在数组,结构或元组中
- 如何给一个参数一个由其他参数的函数确定的默认值
- C++如何给一个参数一个特定的枚举,它可以是
- 如果我在默认构造函数中放了一个参数,但给了这个参数一个默认值,它还是一个默认构造函数吗
- 为什么在c++中给typename模板参数一个默认值0 ?