【发布时间】:2013-09-05 09:21:01
【问题描述】:
在C++11中,要判断一个类是否有成员函数size,可以定义如下的测试助手:
template <typename T>
struct has_size_fn
{
typedef char (& yes)[1];
typedef char (& no)[2];
template <typename C> static yes check(decltype(&C::size));
template <typename> static no check(...);
static bool const value = sizeof(check<T>(0)) == sizeof(yes);
};
在 C++98 中是否有类似的技巧可以在不依赖编译器扩展(例如 typeof)的情况下执行此操作?
【问题讨论】:
-
这也会检测数据成员。
-
这可能有用:en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector -- 编辑: 还有:stackoverflow.com/questions/257288/…(不要停留在第一个答案上)
-
@jrok 没关系,它将在模板函数中使用,如果它不是函数,则会导致编译错误 - 我可以忍受。
-
@nijansen 如果
size是私有的而不是SFINAE,它也会触发一个硬错误。在 C++98 中你也必须忍受它,除非你从 gx_ 的评论中切换到该技术。