C++如何通过模板类Object的实例构造其模板参数T的新对象
可以实现,只要调整现有写法即可,核心要修正两个语法问题:
Object是模板类,必须绑定模板参数才能作为独立类型使用,不能直接写void foo(Object object)- 模板参数
T是Object的内部模板参数,默认不对外暴露,需要手动导出类型别名才能在类外获取
修正后的实现步骤
首先在Object类的public区域添加类型别名,导出模板参数T:
template <class T> class Object { public: // 对外导出模板参数类型 using value_type = T; // 其他原有类逻辑 };
之后有两种常见写法实现需求:
写法1:将foo声明为模板函数,直接获取T
template <typename T> void foo(Object<T> object) { // 直接用模板参数T构造对象 auto newT = T(); }
写法2:从Object实例提取T类型(兼容C++20及以上版本的简化写法)
void foo(auto object) { // 从实例类型中提取之前导出的value_type,也就是模板参数T using T = typename decltype(object)::value_type; auto newT = T(); }
如果使用C++11/14版本,只需要把上面的auto参数替换为模板声明即可,核心逻辑完全一致。
内容的提问来源于stack exchange,提问作者Max Gómez
相关产品推荐
相关产品推荐

