首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成员函数&常量成员函数指针推导

成员函数&常量成员函数指针推导
EN

Stack Overflow用户
提问于 2012-04-18 15:57:11
回答 1查看 898关注 0票数 1

我有以下代码:

代码语言:javascript
运行
复制
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));
 }

它工作得很好,但我不想让常量和非常量成员函数指针有两个不同的函数。所以问题是:有没有办法将void foo(T&, const std::function<Ret()>&)void foo(T&, Ret(T::*)() const)合并到一个函数中?请注意,存在std::function重载,它也应该参与合并后的解析。我需要一些函数,它将只接受成员函数指针。而所有其他版本都将升级到std::function版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 16:11:52

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

代码语言:javascript
运行
复制
template<typename T, typename U, typename enable_if<is_fuction<T>::value, int>::type = 0> 
void takesboth(T U::*);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10205248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档