检测size_t是否使用g ++预处理器内置

时间:2014-08-22 22:24:59

标签: c++ g++ built-in size-t

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 ++。

1 个答案:

答案 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来有条件地禁用它。