关于c ++:检查模板参数是否具有成员函数

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&)};
};