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

C++两个存在依赖的模板模板参数编译报错如何解决

问题根因

你定义Duo的第一个模板模板参数HOLD时,声明它的入参是普通typename类型,但你实际要传入的Holder模板,本身要求的入参是单参数模板模板参数,二者签名不匹配。编译器按照你写的签名,认为HOLD<S>里需要传入一个类型,但S是未实例化的模板,自然触发类型不匹配报错。

修正方案

只需要调整Duo第一个模板模板参数的签名,匹配Holder的参数要求即可:
把原来的template<typename> class HOLD改为template<template<typename> class> class HOLD,明确声明HOLD是一个接收「单参数模板模板参数」的模板。

修正后可正常编译的完整代码如下:

template<class T>
struct Solid
{
    T _t;
};

template<template<typename> class SE>
struct Holder
{
    SE<int> _se;
};

// 仅修改此处HOLD的模板参数签名即可
template<template<template<typename> class> class HOLD,
         template<typename> class S>
struct Duo 
{
    HOLD<S> _mem;
};


int main()
{
    Duo<Holder, Solid> a;
    return 0;
}

内容的提问来源于stack exchange,提问作者user997112

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:48:03