如何用另一個函數包裝一個通用的 C++ std :: tr1 :: function對象,使得該函數首先執行後面的包裝函數?我已經試過:C++用另一個函數包裝一個通用的std :: tr1 ::函數
#include <tr1/functional>
template <typename T>
int wrapped(const std::tr1::function<int(T)>& f, T t)
{
return f(t);
}
template <typename T>
std::tr1::function<int(T)> wrap(const std::tr1::function<int(T)>& f)
{
return std::tr1::bind(&wrapped, f, std::tr1::placeholders::_1);
}
int foo(int i) { return i; }
int main(int argc, char** argv)
{
std::tr1::function<int(int)> f =
wrap(std::tr1::bind(&foo, std::tr1::placeholders::_1));
f(1);
return 0;
}
但這返回與編譯器錯誤(G ++):
wrap.cpp: In function ‘int main(int, char**)’:
wrap.cpp:22: error: no matching function for call to ‘wrap(std::tr1::_Bind<int (*()(std::tr1::_Placeholder<1>))(int)>)’