在编译时检测类是否具有成员变量或函数

Detecting at compile-time whether a class has a member variabe or function

本文关键字:成员 变量 函数 是否 编译 检测      更新时间:2023-10-16

我试图在编译时检测类FooBar是否具有变量value或成员变量initValue()

struct Foo
{
    static const int value;
    static int initValue();
};
struct Bar
{
};

我发现了几个boost和boost MPL类和utils,如BOOST_MPL_HAS_XXX_TRAIT_DEFvalid_member_metafunction,它们似乎只是这样做的,但不确定该使用哪一个。我知道有可能推出我自己的探测器,但我宁愿不推出。

从Boost TTI库中找到了has_static_member_datahas_static_member_function

#include <boost/tti/has_static_member_data.hpp>
BOOST_TTI_HAS_STATIC_MEMBER_DATA( value ) // Generates class template has_static_member_data_value
...
has_static_member_data_value<Foo, int>::value;  // returns true
has_static_member_data_value<Bar, int>::value;  // returns false