c++ - 在编译时检测一个类是否有成员变量或函数

标签 c++ templates boost boost-mpl

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

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

struct Bar
{
};

我发现了几个 boost 和 boost MPL 类和实用程序,例如 BOOST_MPL_HAS_XXX_TRAIT_DEFvalid_member_metafunction,它们似乎就是这样做的,但不确定使用哪个。我知道可以推出我自己的检测器,但我宁愿不这样做。

最佳答案

找到了。 has_static_member 数据has static member function 来自 Boost TTI图书馆。

#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

关于c++ - 在编译时检测一个类是否有成员变量或函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23342963/

相关文章:

c++ - 自身模板崩溃原因

c++ - Xcode - 将二进制文件与调试和发布库链接

c++ - 解释来自 cppreference.com 的关于迭代器标签的示例代码

c++ - 如何使用可变参数包为嵌套模板类起别名

c++ - 将类型解析为 class::typedef 的更短方法

c++ - 使用 libpcl_surface 在 boost::math::lanczos 中调试段错误

C++ 帮助 boost::ptr_map/boost::checked_delete 失败

c++ - Dlib 错误 LNK2001 无法解析的外部符号

c++ - std::cout 输出直到程序结束才打印

java - 如何将抽象 Number 初始化为 0?