成员函数和const成员函数指针扣

问题描述:

我有以下代码:成员函数和const成员函数指针扣

template <class Ret> 
class Foo 
{ 
public: 
    template <class T> 
    void foo(T&, const std::function<Ret()>&) 
    { 
     std::cout << "std::function<Ret()>\n"; 
    } 
    template <class T> 
    void foo(T&, Ret(T::*)() const) 
    { 
     std::cout << "Ret(T::*)() const\n"; 
    } 
    template <class T> 
    void foo(T&, Ret(T::*)()) 
    { 
     std::cout << " Ret(T::*)()\n"; 
    } 
}; 

class A 
{ 
public: 
    void foo1() const 
    { 
    } 
    void foo() 
    { 
    } 
}; 

int main() 
{ 

    A a; 
    Foo<void> f; 
    f.foo(a, &A::foo); 
    f.foo(a, &A::foo1); 
    f.foo(a, std::bind(&A::foo, a)); 
} 

它运作良好,但我不希望有const和non-const成员函数指针的2个不同的功能。所以,问题是:有没有办法合并 无效美孚(T &,常量的std ::功能&) & 无效美孚(T &,保留(T :: *)()const的)一个功能?请注意,存在std :: function重载,它应该在合并后参与解析。我需要一些函数,它只会使用成员函数指针。而所有其他的将会进入std :: function版本。

谢谢!

你似乎在问一个隐含的问题和一个明确的问题。您隐含的问题“如何合并const和nonconst版本”的答案如下

template<typename T, typename U, typename enable_if<is_fuction<T>::value, int>::type = 0> 
void takesboth(T U::*); 
+0

感谢您的线索!我甚至没有想过关于enable_if。 – ixSci 2012-04-18 14:20:19