如何实现声明功能-C 11,编译时间



我有一个问题是否有办法实现cellettype关键字功能pre c 11。

我有一个简化的向量

template <class T>
struct MyVector {
    typedef T ElementType;
    T* arrayPtr;
    uint64_t numberOfElements;
};

我希望能够在通用宏中获得T型T型,该宏可与此MyVector一起使用

#define ALLOCATE_SPACE(VectorRef, numberOfItems) 
{ 
    arrayPtr = new decltype(VectorRef)::ElementType[numberOfItems];  
} 

问题是我不能使用C 11东西。完美的解决方案是使其100%编译时间类型扣除。

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

最好的问候

这是可能的。有一个提升宏来完成此魔术:

#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(浮点(。现场演示

不过,正如评论中已经指出的那样,您不需要这个问题。简单的模板功能将完成工作。

最新更新