有没有办法以类似于下面一行的方式定义对象???
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
答案 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??
}