내 자신의 아카이브 시스템 관리 전화를 컴파일시에 표준 : : size_t와 유형을 감지 이는 컴파일러에 따라 다를 수 있습니다. 예를 들어 Linux 64 비트에서 gcc를 사용하는 경우 std::size_t
은 unsigned long int
이지만 Intel 64 비트 Windows에서 std::size_t
은 unsigned long long int
입니다. 단 하나 개의 라인이 어느 유형이 컴파일시에 알려져, 실행할 수 있습니다 그것은 추한 : 나는 행복하지 않다,나는 다음과 같은 가상 함수가 오른쪽 기능
void OutputArchive::save_size_t(std::size_t i)
{
if(boost::is_same<std::size_t,unsigned long int>::value)
this->save_unsigned_long_int((unsigned long int)i);
else if(boost::is_same<std::size_t,unsigned long long int>::value)
this->save_unsigned_long_long_int((unsigned long long int)i);
else { /* error management */ }
}
그러나, 제 1 방법에서, 나는 그런 일을 썼다. 전처리로 더 잘할 수 있다고 생각하지만, 어떻게 시작해야할지 모르겠습니다. 어떤 도움도 환영합니다.
참고 : 호환성 이유로 인해 C++ 11을 사용하지 않지만 Boost를 사용합니다.
SFINAE의 유스 케이스처럼 보입니다. – user0042
'std :: size_t'는 항상 타입 별칭입니다. 그렇지 않습니까? 이 두 가지 중 하나가 적용되는 경우 오버로드를 추가 할 필요가 없습니다. – StoryTeller
'save_unsigned_long_int' 및'save_unsigned_long_long_int'? 과부하가있는 C++에 대한 전체 * 이유 *를 우회하지 않습니까? 인수에 여러 유형을 허용하는 * 하나의 * 함수 이름이 아닌 이유는 무엇입니까? – paxdiablo