C++指针变量的模板推导:如何省略冗余模板参数?
解决模板类指针无需重复指定模板参数的方法
你遇到的问题是模板类指针必须显式指定模板参数,不想用auto又嫌重复书写冗余,下面是几种满足你需求的方案:
1. 用类型别名简化声明
先给实例化的模板类定义一个别名,后续指针直接用别名声明,既能明确看到具体类型,又避免重复写模板参数:
using ObjectType = object<128>; ObjectType Object; ObjectType* ObjectPointer = &Object;
这里ObjectType清晰对应object<128>,指针声明时直接复用别名,代码更简洁且类型明确。
2. 借助decltype推导并复用类型
用decltype获取已定义对象的类型,再用这个类型声明指针,同样能显式看到类型:
object<128> Object; using ObjectType = decltype(Object); ObjectType* ObjectPointer = &Object;
或者直接在指针声明中使用decltype:
object<128> Object; decltype(Object)* ObjectPointer = &Object;
decltype(Object)会被编译器推导为object<128>,这样既不用重复写模板参数,又能通过decltype(Object)*明确知道指针的类型。
3. 用辅助函数生成指针
写一个简单的模板辅助函数,自动推导参数类型并返回指针,声明指针时依然显式写出完整类型:
template<typename T> T* get_ptr(T& obj) { return &obj; } // 使用示例 object<128> Object; object<128>* ObjectPointer = get_ptr(Object);
这种方式下,你只需要在指针声明时写一次完整类型,辅助函数帮你完成取地址的操作,避免了手动写&Object时的模板参数重复问题。
内容的提问来源于stack exchange,提问作者hacksoi
相关产品推荐
相关产品推荐

