要检测一个通用成员,我们应该使用模板类来实现。具体步骤如下:
以下是完整的示例代码:
template
class has_member
{
private:
typedef char yes[1];
typedef char no[2];
template
static yes& test(decltype(&U::member));
template
static no& test(...);
public:
static constexpr bool value = sizeof(test(0)) == sizeof(yes);
};
这个类可以用来检测一个类是否有一个名为'member”的公有成员。在实际使用中,可以这样做:
struct foo
{
int member;
};
struct bar
{
void member();
};
int main()
{
std::cout << has_member::value << std::endl; // 输出1
std::cout << has_member::value << std::endl; // 输出0
return 0;
}
这个例子中,我们定义了两个类'foo”和'bar”,前者有一个名为'member”的int类型公有成员变量,后者有一个名为'member”的void类型公有成员函数。我们可以通过传入这两个类到'has_member”模板类中来检测它们是否有名为'member”的公有成员。