从模板类型定义对象

时间:2015-01-08 13:14:58

标签: c++ templates

有没有办法以类似于下面一行的方式定义对象???

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??
}

谢谢!

的Massimo

3 个答案:

答案 0 :(得分:4)

您可以使用decltype on expressions。你案件的代码是:

decltype(obj)::data_type b;

答案 1 :(得分:2)

从C ++ 11开始,可能

decltype(obj)在编译时进行评估,并且是obj类型。只要使用类型,就可以使用它。

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

decltype关键字,在通用编程中特别有用。

答案 2 :(得分:1)

这似乎工作正常;对c ++ 11使用decltype();你可以尝试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??
}