1

我有以下代码:

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

4

1 回答 1

1

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

template<typename T, typename U, typename enable_if<is_fuction<T>::value, int>::type = 0> 
void takesboth(T U::*);
于 2012-04-18T08:11:51.730 回答