请考虑以下代码:
int main(){
MyObject<int> obj;
foo(obj);
}
template <typename T>
void foo(T& objct){
...
}
在foo中,objct
的类型将是myobject
。
我想在foo()
中创建一个变量,它的类型是objct
的泛型,在本例中是int
。
有没有办法做到这一点?谢谢。
编辑不幸的是(我想)我无法重写签名,因为函数foo()
是用不同类型的对象调用的,例如
int main(){
MyObject<int> obj;
MyDifferentObject<int> obj2;
foo(obj);
foo(obj2);
}
我想在foo()中创建一个变量,它的类型是objct的泛型,在本例中是int。有办法做到这一点吗?
如果可以更改函数签名,那么可以这样做:
template <typename T>
void foo(MyObject<T>& objct){
T variable;
如果这不是一个选项,例如,如果您希望foo
也允许其他模板(例如在您编辑的问题中),那么您可以定义一个类型特征:
template<class T>
struct fancy_type_trait
{
};
template<class T>
struct fancy_type_trait<MyObject<T>>
{
using type = T;
};
template<class T>
struct fancy_type_trait<MyDifferentObject<T>>
{
using type = T;
};
template <typename T>
void foo(T& objct){
using V = fancy_type_trait<T>::type;
V variable;