我想在gcc 4.7.2上將一些代碼轉換爲C++ 11。部分代碼包括將boost::factory
分配給boost::function
。但是,如果我將其更改爲std::function
,編譯失敗並伴有大量警告。下面是示例代碼重現錯誤:boost :: factory和std :: function
#include <boost/functional/factory.hpp>
#include <boost/function.hpp>
#include <functional>
struct S {
S(int) {}
};
int main() {
boost::function<S*(int)> b = boost::factory<S*>(); // ok
std::function<S*(int)> s = boost::factory<S*>(); // error
}
這給error: no match for call to ‘(boost::factory<S*>) (int)’
有趣的是,如果S
不帶任何參數,std::function<S*()>
分配給boost::factory
毫無怨言。爲什麼這不起作用?是否有解決方法可以將boost::factory
分配給std::function
?我使用Boost.1.53