【发布时间】:2015-12-04 17:41:39
【问题描述】:
我正在尝试编写一些将函数(带有参数)存储为对象成员的代码,以便以后可以以通用方式调用它。目前我的示例使用 std::function 和 std::bind。
#include <functional>
class DateTimeFormat {
public:
DateTimeFormat(std::function<void(int)> fFunc) : m_func(fFunc) {};
private:
std::function<void(int)> m_func;
};
class DateTimeParse {
public:
DateTimeParse() {
DateTimeFormat(std::bind(&DateTimeParse::setYear, std::placeholders::_1));
};
void setYear(int year) {m_year = year;};
private:
int m_year;
};
int main() {
DateTimeParse dtp;
}
从这里我得到错误
stackoverflow_datetimehandler.cpp:在构造函数“DateTimeParse::DateTimeParse()”中: stackoverflow_datetimehandler.cpp:16:95: 错误: 没有匹配函数调用‘DateTimeFormat::DateTimeFormat(char, int, int, int, std::_Bind_helper&>::type)’ DateTimeFormat('Y',4,1900,3000,std::bind(&DateTimeParse::setYear, std::placeholders::_1));
我不,这是因为我的构造函数没有声明正确的参数类型。但我不确定我是否朝着我想要实现的目标迈进了正确的方向。是否有更好的方法来执行此任务?如果这是处理这个问题的好方法,那么我该如何解决这个问题并保留占位符?
【问题讨论】:
-
你的意思是
std::bind(&DateTimeParse::setYear, this /*<<<*/, std::placeholders::_1)吗? -
DateTimeFormat接受一个参数,一些可调用的可转换为std::function<void(int)>。那么这些到底是什么 -'Y',4,1900,3000?
标签: c++ c++11 std-function stdbind