使用gcc 4.1.2版仿真is_pointer

Fra*_*ank 2 c++ linux gcc

我想知道是否有可能在Centos 5.5版上的gcc 4.1.2上模拟boost,tr1 is_pointer功能.如果有可能,我会欢迎有关如何做到这一点的建议?

Fle*_*exo 5

诀窍在于专业化:

#include <iostream>

template <typename T>
struct is_pointer {
   enum { value = 0 };
};

template <typename T>
struct is_pointer<T*> {
   enum { value = 1 };
};

template <typename T>
bool ptr_test(const T&) {
   return is_pointer<T>::value;
}

int main() {
   int *ptr;
   const int *ptr2;
   int a;
   double b;

   std::cout << "ptr:" << ptr_test(ptr) << std::endl;
   std::cout << "ptr2:" << ptr_test(ptr2) << std::endl;
   std::cout << "a:" << ptr_test(a) << std::endl;
   std::cout << "b:" << ptr_test(b) << std::endl;

}
Run Code Online (Sandbox Code Playgroud)

(按照预期在CentOS 5.3上运行,使用gcc 4.1.2)

  • @Pawel:`inline`关键字与实际内联几乎没有任何关系.不仅如此,无论如何,模板本质上几乎都是内联的.在这里使用`inline`只是噪音,只有当你需要打破一个定义规则时才使用它. (4认同)