我试图在编译时检测类Foo
或Bar
是否具有变量value
或成员变量initValue()
。
struct Foo
{
static const int value;
static int initValue();
};
struct Bar
{
};
我发现了几个boost和boost MPL类和utils,如BOOST_MPL_HAS_XXX_TRAIT_DEF
和valid_member_metafunction
,它们似乎只是这样做的,但不确定该使用哪一个。我知道有可能推出我自己的探测器,但我宁愿不推出。
从Boost TTI库中找到了has_static_member_data
和has_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