这个Q是以下的扩展:
Templated check for the existence of a class member function?
是否有任何实用程序可以帮助查找:
- 成员名称是否存在于类中?该成员可以是 变量或方法。
- 指定成员的类型应该是可选的
最佳答案
与 std::experimental::is_detected
和 std::experimental::disjunction
你可以这样做:
//check for a type member named foo
template <typename T>
using foo_type_t = typename T::foo;
//check for a non-type member named foo
template <typename T>
using foo_non_type_t = decltype(&T::foo);
template <typename T>
using has_foo = disjunction<is_detected<foo_type_t, T>,
is_detected<foo_non_type_t, T>>;
然后你会使用has_foo<my_class>::value
随心所欲。
以上不仅适用于类型和成员函数,而且您可以使用 std::is_member_function_pointer
等特征轻松地对其进行约束。和 std::is_member_object_pointer
如果你愿意。
要提供您的可选参数,您可以使用 std::experimental::is_detected_exact
helper 。
请注意,如果您从我链接的页面中获取上述特征的实现,则可以将其与 C++14 一起使用。对 disjunction
的一个小改动代码将允许您在 C++11 中使用它。
关于c++ - 如何检查类中是否存在成员名称(变量或函数),是否指定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36079170/