会员功能& const成员函数指针推导

时间:2012-04-18 07:57:11

标签: c++ c++11 templates member-function-pointers template-deduction

我有以下代码:

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和非const成员函数指针有2个不同的函数。所以问题是:有没有办法合并 void foo(T&, const std::function<Ret()>&)void foo(T&, Ret(T::*)() const)到一个函数?请注意,有std::function重载也应该在合并后参与解析。我需要一些只接受成员函数指针的函数。所有其他人都将进入std::function版本。

1 个答案:

答案 0 :(得分:1)

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

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