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

C++如何将绑定参数的struct作为模板默认参数传入?

实现方案

该需求在C++中完全可行,原代码的核心错误是第二个模板参数的声明类型不符合要求:

  • 你使用auto声明第二个模板参数,代表它是非类型模板参数,需要传入编译期常量值,而My_struct是未实例化的类模板,既不是合法的常量值,也不符合你的使用需求
  • 你需要传入的My_struct<T>是模板实例化后的具体类型,因此第二个模板参数应该声明为类型参数,使用typename关键字即可

最贴合需求的实现(默认传入实例化后的My_struct<T>类型)

template <typename T>
struct My_struct
{
    void func(T* ptr)
    { 
        /* Do stuff */ 
    }
};

// 第二个参数改为类型模板参数,默认值设为My_struct<T>
template <typename T, typename U = My_struct<T>> 
struct Other_struct
{
    // 可直接使用U作为类型声明成员、定义函数等
    U impl;
};

扩展场景:如果需要传入类模板本身而非实例化类型

如果你需要第二个模板参数接收和My_struct同形态的单参数类模板,在结构体内部再自行决定实例化参数,可以使用模板模板参数写法:

template <typename T, template<typename> typename U = My_struct>
struct Other_struct
{
    // 内部按需用T实例化U
    U<T> impl;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:02