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
相关产品推荐
相关产品推荐

