2011-02-11 5 views
2

CentOS 버전 5.5의 gcc 4.1.2에서 tr1 is_pointer 기능을 향상시킬 수 있는지 궁금합니다. 가능하다면 어떻게해야할까요?gcc 버전 4.12와의 is_pointer 에뮬레이션

+4

은 그냥 부스트 라이브러리 자체를 사용하여 작동하지 않는 이유는 무엇입니까? – Tristan

+0

@Tristan, 우리는 boost 라이브러리, 특히 boost regex 클래스를 실험했습니다. 우리는 여전히 그것을 평가 중입니다. 감사합니다 – Frank

답변

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; 

} 

(작품 GCC 4.1.2로, CentOS는 5.3에서 예상대로)

+0

'ptr_test()'는'inline' IMHO 여야합니다. 예, 예, 저는 컴파일러가 아마 그것없이 최적화 할 것이라는 것을 압니다. 그러나 여전히, 거기에 있어야합니다. –

+0

필자는 ptr_test()를 사용하여 형식 공제가 유용 할 수있는 방법을 보여줍니다. – Flexo

+0

@awoodland 답변 해 주셔서 감사합니다. 나는 그것을 시도 할 것이다. – Frank