Checking whether a template argument has a member function
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Is it possible to write a C++ template to check for a function's existence?
这与我之前的问题非常相似。我想检查模板参数是否包含成员函数。
我试过这个代码,类似于我上一个问题的公认答案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | struct A { int member_func(); }; struct B { }; template<typename T> struct has_member_func { template<typename C> static char func(???); //what should I put in place of '???' template<typename C> static int func(...); enum{val = sizeof(func<T>(0)) == 1}; }; int main() { std::cout<< has_member_func::val; //should output 0 std::cout<< has_member_func<A>::val; //should output 1 } |
但我不知道我应该用什么来取代
对MalSter概念的修改,是否有可能编写一个C++模板来检查函数的存在性吗?:
1 2 3 4 5 6 7 8 9 10 | template<typename T> class has_member_func { typedef char no; typedef char yes[2]; template<class C> static yes& test(char (*)[sizeof(&C::member_func)]); template<class C> static no& test(...); public: enum{value = sizeof(test<T>(0)) == sizeof(yes&)}; }; |