如何创建以模板为参数的C++模板 现有继承写法编译不通过
错误原因
- 原代码中
S被定义为普通类型模板参数,只能接收已实例化的具体类型,而A、B是未完成实例化的模板,不属于具体类型,无法匹配普通类型参数的要求 - 若要将模板本身作为参数传入,需要使用C++的模板模板参数语法,显式声明入参是模板类型
修复后可正常编译的代码
template <typename T> struct A {}; template <typename T> struct B {}; // 将S声明为接收1个类型参数的模板模板参数 template <template <typename> typename S, typename T> struct C : S<T> {}; int main() { A<int> a; B<int> b; C<A, int> c; }
补充说明
- C++17之前的标准中,模板模板参数的声明可以用
class替代typename,写法为template <template <typename> class S, typename T>,语义完全一致 - 如果需要传入的模板有多个参数,只需对应调整模板模板参数的参数列表即可,比如要接收双参数模板可写为
template <typename, typename> typename S
内容的提问来源于stack exchange,提问作者fatdragon
相关产品推荐
相关产品推荐

