我有一个问题,是否有办法在c ++ 11之前实现decltype关键字功能。
我有一个简化的vector类
template <class T>
struct MyVector {
typedef T ElementType;
T* arrayPtr;
uint64_t numberOfElements;
};
我希望能够在通用MACRO中获得可用于此MyVector的类型T
#define ALLOCATE_SPACE(VectorRef, numberOfItems) \
{ \
arrayPtr = new decltype(VectorRef)::ElementType[numberOfItems]; \ \
} \
问题是我无法使用c ++ 11的东西。完美的解决方案是使其100%编译时间类型扣除。
任何人都可以帮我解决这个问题吗?
最好的问候
答案 0 :(得分:0)
这是可能的。有一个提升宏实现这个魔力:
#include <boost/typeof/typeof.hpp>
#include <iostream>
#include <typeinfo>
int main() {
int a; float b;
BOOST_TYPEOF(a+b) c = a+b;
std::cout << typeid(c).name() << std::endl;
}
打印f
(浮动)。 Live Demo
尽管如评论中已经指出的那样,您不需要这个问题。一个简单的模板功能就可以完成这项任务。