如何检测具有特定签名的静态成员函数的存在? [英] How to detect the presence of a static member function with certain signature?
本文介绍了如何检测具有特定签名的静态成员函数的存在?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我发现了几个问题,关于在处理时(通过SFINAE)检测给定类是否具有特定名称,类型或签名的成员的SO的答案。但是,我找不到一个同样适用于静态公共成员函数的函数(当指向成员的技巧不起作用时)。有任何想法吗?
I found several questions & answers on SO dealing with detecting at compile time (via SFINAE) whether a given class has a member of certain name, type, or signature. However, I couldn't find one that also applies to static public member functions (when pointer-to-member tricks won't work). Any ideas?
推荐答案
以下方法可能会有所帮助:( https ://ideone.com/nDlFUE )
Following may help: (https://ideone.com/nDlFUE)
#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); \
}
然后定义一个特征:
DEFINE_HAS_SIGNATURE(has_foo, T::foo, void (*)(void));
这篇关于如何检测具有特定签名的静态成员函数的存在?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文