関数オブジェクトを渡す次の小さなプログラムで何が問題になっていますか?関数オブジェクトを渡す:エラー
#include <iostream>
#include <functional>
void foo(const std::unary_function<const std::string&, void>& fct) {
const std::string str = "test";
fct(str); // error
}
class MyFct : public std::unary_function<const std::string&, void> {
public:
void operator()(const std::string& str) const {
std::cout << str << std::endl;
}
};
int main(int argc, char** argv){
MyFct f;
foo(f);
return 0;
}
私は6行目に次のエラーを取得しています:
no match for call to
`(const std::unary_function<const std::string&, void>) (const std::string&)'
ありがとうございます!ブーストソリューションはテンプレートソリューションほど効率的ですか? – Frank
ブースト・ソリューションは、ラップされた関数オブジェクトへの間接呼び出しを行う必要があるため効率的ではありません(それはそれ自身のvtableを作成します)。しかし、それはあなたがテンプレートを必要としないという利点があります。そのboost.functionを使用して、どこかに格納することができます(クラスメンバーなど)。 –
私はあなたがunary_functionで探していたものに最も近いと思います –