Mac OS / X声明使用内置size_t
,如:
typedef __SIZE_TYPE__ size_t;
这使得size_t
成为与任何其他类型(例如unsigned long
)不同的类型。这在PPC和amd64上都是如此。
使用i386进行编译时,我们得到通常的结果:
typedef unsigned long size_t;
这样我的开发其余部分就可以正常工作。但是,当使用内部类型定义size_t
时,我必须向我的类添加一个声明。
所以我需要知道这个类是否应该有这个定义。像这样:
class my_class
{
...
void func(unsigned long ul);
#if SIZE_T_BUILTIN
void func(size_t s);
#endif
...
};
SIZE_T_BUILTIN
正确检测size_t是自己的类型会是什么?
此时我只需要g ++。
答案 0 :(得分:0)
不是检测size_t
是否是您所知道的类型之一,而是可以定义它,如果它不是您已经重载的类型之一,例如:
void func(unsigned long);
template <typename T>
std::enable_if<!std::is_same<size_t, unsigned long>::value
&& std::is_same<T, size_t>::value>::type func(T);
无论func()
是否为会员,都可以这样做。主要技巧是使条件重载成为一个函数模板,这样你就可以使用SFINAE来有条件地禁用它。