首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用泛型STD::在一个类中具有成员函数的函数对象?

使用泛型STD::在一个类中具有成员函数的函数对象?
EN

Stack Overflow用户
提问于 2018-04-18 00:38:18
回答 2查看 0关注 0票数 0

对于一个类,我想在一个类中存储一些指向同一个类的成员函数的函数指针。map贮存std::function对象。但我在一开始就失败了,这段代码是:

代码语言:txt
复制
class Foo {
    public:
        void doSomething() {}
        void bindFunction() {
            // ERROR
            std::function<void(void)> f = &Foo::doSomething;
        }
};

我收到error C2064: term does not evaluate to a function taking 0 argumentsxxcallobj结合一些奇怪的模板实例化错误。目前,我使用VisualStudio 2010/2011在Windows 8上工作,用VS 10在Win 7上工作,它也失败了。错误必须基于一些我不遵循的奇怪的C++规则。

EN

回答 2

Stack Overflow用户

发布于 2018-04-18 08:54:04

必须使用对象调用非静态成员函数.也就是说,它总是隐式地传递“this”指针作为它的参数。

因为你std::function签名指定您的函数不带任何参数(<void(void)>那你必须绑定第一个(也是唯一的)论点。

代码语言:txt
复制
std::function<void(void)> f = std::bind(&Foo::doSomething, this);

如果要用参数绑定函数,则需要指定占位符:

代码语言:txt
复制
using namespace std::placeholders;
std::function<void(int,int)> f = std::bind(&Foo::doSomethingArgs, this, _1, _2);

或者,如果编译器支持C++11 lambdas:

代码语言:txt
复制
std::function<void(int,int)> f = [=](int a, int b) {
    this->doSomethingArgs(a, b);
}

(我手头没有C++11能力的编译器现在所以我不能检查这个。)

票数 0
EN

Stack Overflow用户

发布于 2018-04-18 10:36:49

要么你需要

代码语言:txt
复制
std::function<void(Foo*)> f = &Foo::doSomething;

这样就可以在任何实例上调用它,或者需要绑定特定的实例,例如this

代码语言:txt
复制
std::function<void(void)> f = std::bind(&Foo::doSomething, this);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003910

复制
相关文章

相似问题

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