我有一个模板,我想专门研究两种int类型,其中一种是普通的int
,另一种是intptr_t
。在64位平台上,它们具有不同的大小,我可以轻松地做到这一点,但在32位上,两种类型都是相同的,编译器会抛出有关重新定义的错误。除了使用预处理器禁用其中一个定义外,我该怎么做才能解决它?
以某些代码为例:
template<typename T>
type * convert();
template<>
type * convert<int>() { return getProperIntType(sizeof(int)); }
template<>
type * convert<intptr_t>() { return getProperIntType(sizeof(intptr_t)); }
//this template can be specialized with non-integral types as well,
// so I can't just use sizeof() as template parameter.
template<>
type * convert<void>() { return getProperVoidType(); }
答案 0 :(得分:2)
你想要实现的是根本不可能的:intptr_t是32位系统上int的typedef,因此编译器无法区分它们。但是,您的示例可以通过专门处理void case来解决:
template<typename T>
type * convert() { return getProperIntType(sizeof(T)); }
template<>
type * convert<void>() { return getProperVoidType(); }