2012-02-17 6 views
3

C++ 오브젝트가 time_t인지 여부를 판별하려면 어떻게해야합니까? 정수형 time_t는 다음과 같이 정의됩니까? 일체형하는 time_t가 전달되는 것으로 정의 할 때 특화되지 않은 함수가 호출됩니다C++ 오브젝트가 time_t인지 판별하는 방법

template <typename T> void myFunction(T val); 
template<>   void myFunction<time_t>(time_t val); 

있도록 내가 특별히 기능을 전문 템플릿 할

.

내 STL 구현은 time_tlong으로 정의하므로 myFunction(42L)은 time_t 전문화를 호출합니다. 이 문제를 어떻게 방지 할 수 있습니까?

long을 전문적으로 사용해 보았습니다. 결과적으로 컴파일 오류가 발생합니다 (본문은 이미 정의되어 있습니다). 나는 또한 rtti를 시도했다, typeid(time_t).name()"long"를 돌려 보낸다.

time_t과 정수형을 구별 할 수 있습니까? 그리고/또는 템플릿이 정수형이 특성화에 전달되지 않도록 time_t를 전문화 할 수 있습니까?

템플릿을 사용하는 것이 더 좋지만 솔루션, 런타임 또는 컴파일 타임을 허용합니다.

+2

[Dobbs 박사가 제공 한 강력한 typedef 구현] (0120-943-2400) –

+0

Ben, 대답했으면 좋았을 텐데 .. – sarnold

답변

6

이를 방지 할 수있는 방법은 없습니다.

C++의 경우 typedef모두의 기본 유형과 같습니다. 컴파일시에는 동일합니다. 실행시에는 동일합니다.

time_t의 정의를 완전히 제거하고이를 다른 유형으로 다시 정의 할 수는 있지만 사용자 코드가 적절한 time_t을 기대하는 기능을 호출하는 기능이 손상 될 수 있습니다.

3

근본적으로 원하는 것을 얻을 수 없습니다. time_t은 (적어도 C 표준에서) typedef (힌트는 새 형식을 도입하지 않는 이름의 "_t"부분)으로 정의됩니다. 누군가가 하나의 이름을 부르는 지 아니면 다른 이름을 부르는지를 구별하고 싶지만 C와 C++은 그것을 허용하지 않습니다.