提问者:小点点

如何声明一个类型是另一个对象的泛型的变量?


请考虑以下代码:

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);
}

共1个答案

匿名用户

我想在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;

相关问题