在这个问题中:
Check if a class has a member function of a given signature
它们解决了如何确定某个类是否具有某种类型的成员函数的问题。这可能听起来像一个天真的问题,但我无法自己找到。如何确定该签名是否存在静态函数?您是否可以扩展链接问题中给出的示例,以确定该类中是否存在返回used_memory或其他内容的静态函数?
答案 0 :(得分:0)
您可以使用以下内容:
#include <cstdint>
#define DEFINE_HAS_SIGNATURE(traitsName, funcName, signature) \
template <typename U> \
class traitsName \
{ \
private: \
template<typename T, T> struct helper; \
template<typename T> \
static std::uint8_t check(helper<signature, &funcName>*); \
template<typename T> static std::uint16_t check(...); \
public: \
static \
constexpr bool value = sizeof(check<U>(0)) == sizeof(std::uint8_t); \
}
// signature is the important part for static. it is not (T::*)
DEFINE_HAS_SIGNATURE(has_static_foo, T::foo, void (*)(void));
// signature use (T::*) here for member
DEFINE_HAS_SIGNATURE(has_member_foo, T::foo, void (T::*)(void));