我試圖編寫一些代碼來存儲一個函數(帶參數)作爲對象成員,這樣我可以稍後在通用函數中調用它時尚。目前我的例子使用std :: function和std :: bind。存儲在一個對象中包含std ::佔位符的std ::函數
#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: In constructor ‘DateTimeParse::DateTimeParse()’: stackoverflow_datetimehandler.cpp:16:95: error: no matching function for call to ‘DateTimeFormat::DateTimeFormat(char, int, int, int, std::_Bind_helper&>::type)’ DateTimeFormat('Y',4,1900,3000,std::bind(&DateTimeParse::setYear, std::placeholders::_1));
我不認爲那是因爲我的構造函數不申報正確的參數類型。但我不確定我是否正朝着正在努力實現的目標前進。有沒有更好的方法來完成這項任務?如果這是處理這個問題的好方法,那麼我該如何去解決這個問題並保留佔位符?
你的意思'的std ::綁定(DateTimeParse :: setYear,這種/ * * <<< /,的std ::佔位符:: _ 1)'? –
'DateTimeFormat'只有一個參數,一些可轉換爲'std :: function'。那麼究竟是什麼 - 「'Y',4,1900,3000'? –
Praetorian