You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建以模板为参数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:24:01