从模板类型定义对象

Define object from template type

有没有什么方法可以像下面这行一样定义一个对象???

template<typename T>
struct A {
    T *data;
    //...   
    typedef T data_type;
};

int main() {
    A<int>::data_type a;    // ok

    A<int> obj;
    obj.data_type b;        // <-- is it possible to do something like this??
}

谢谢!

马西莫

您可以使用 decltype on expressions。您的案例代码为:

decltype(obj)::data_type b;

从 C++11 开始,它 可能的:

decltype(obj) 在编译时求值,是 obj 类型 。只要使用类型就可以使用它。

所以你可以写decltype(obj)::data_type b;

decltype 是一个 关键字 ,在泛型编程中特别有用。

这似乎工作正常;将 decltype() 用于 c++11;你可以试试 typeof() pre c++11 gcc 中的 typeof():https://gcc.gnu.org/onlinedocs/gcc/Typeof.html

#include <iostream>
using namespace std;

template<typename T>
struct A {
  T *data;
  //...   
  typedef T data_type;
};

int main() {
  A<int>::data_type a;    // ok

  A<int> obj;
  decltype(obj)::data_type b;        // <-- is it possible to do something like this??
}