核心思想和初版代码来自TopLanguage讨论组的akirya,见下。这里是检测是否有operator()
注意使用了对内部类Dummp的特化来确定取若干个同名成员函数地址中某一个,very good。这里涉及了一个很罕见的知识点:链接symbol可以作为模板的非类型参数。仔细瞅瞅那段代码 template < F > struct Dummp {}; 相信对大家来说都很奇葩吧,笔者当时也是吃了一惊,赶紧仔细查了一下c++ iso标准文档. 其它东西对于熟悉模板和SFINAE的人都不成问题。
把上述的代码c++化,注意它是用链接symbol来进行检查的,因此检查也包含只声明而没有定义的函数,所以最好不要用它来检查那些容易故意声明了却不定义的函数,如默认构造函数等。
这个东西boost上面都没有哦,svn上面的develop版我倒是看到了类似名字的头文件,签出下来一看完全是错误的,注释也是错的。国人威武哦。