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

时间:2014-04-28 13:52:24

标签: c++ templates boost boost-mpl

我试图在编译时检测一个类FooBar是否变量value或成员变量{{1} }}

initValue()

我发现了几个提升和提升MPL类和实用程序,例如struct Foo { static const int value; static int initValue(); }; struct Bar { }; BOOST_MPL_HAS_XXX_TRAIT_DEF似乎只是这样做但不确定使用哪个。我知道可以推出自己的探测器,但我不愿意。

1 个答案:

答案 0 :(得分:1)

找到它。来自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