从模板类型定义对象
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??
}
有没有什么方法可以像下面这行一样定义一个对象???
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??
}