如何实现decltype功能 - pre c ++ 11,编译时间

时间:2017-06-22 13:12:00

标签: c++ templates compile-time decltype

我有一个问题,是否有办法在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%编译时间类型扣除。

任何人都可以帮我解决这个问题吗?

最好的问候

1 个答案:

答案 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

尽管如评论中已经指出的那样,您不需要这个问题。一个简单的模板功能就可以完成这项任务。