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

C++如何通过模板类Object的实例构造其模板参数T的新对象

可以实现,只要调整现有写法即可,核心要修正两个语法问题:

  1. Object是模板类,必须绑定模板参数才能作为独立类型使用,不能直接写void foo(Object object)
  2. 模板参数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:54:07