【发布时间】:2016-05-05 15:18:25
【问题描述】:
阅读了Is it possible to write a C++ template to check for a function's existence? 的问题并测试了一些答案,我发现它仅适用于检测不带参数的函数,例如 void HelloWord()。到处寻找答案,要么只是给出无参数函数的解决方案,要么是我无法完全理解的令人眼花缭乱的复杂解决方案。
这是我构建检测器的宏模板代码:
#define MEMBERFUNCTIONTODETECT(CONTAINS_NAME,MEMBERFUNCTION) \
template <typename TemplateItem>\
class CONTAINS_NAME\
{\
typedef char Yes;\
typedef char No[2];\
\
template <typename TemplateClass> static Yes &Test( decltype(&TemplateClass::MEMBERFUNCTION) );\
template <typename TemplateClass> static No &Test(...);\
\
public:\
enum { Value = sizeof(Test<TemplateItem>(0)) == sizeof(char) };\
};
如何修改上述代码以检测类中包含参数的成员函数,例如 void SetPosition(float,float)?
我愿意接受完全重写的解决方案,但如果有任何解决方案比上述更复杂,请尝试尽可能深入地解释正在发生的事情,以便我(可能还有其他人)能够理解它是如何发生的作品。对待我就像我不知道你写的任何东西是什么意思。
【问题讨论】:
标签: c++ function class c++11 member