2
我一直在試圖編寫一段非常簡單的代碼,但它似乎不工作,我無法從編譯器中做出任何意義錯誤。無法將std :: bind返回值分配給std :: function
代碼:
#include <iostream>
#include <sstream>
#include <functional>
class c
{
public:
void test(std::stringstream ss){
std::cout<<ss.str()<<std::endl;
}
void test2(std::stringstream ss){
const auto bound=std::bind(&c::test,this, ss);
std::function<void()> f(bound);
f();
}
};
void test1(const std::stringstream ss){
std::cout<<ss.str()<<std::endl;
}
int main(){
std::stringstream ss;
ss<<"hello world";
//first
const auto bound=std::bind(&test1,ss);
std::function<void()> f(bound);
f();
//second
C obj;
obj.test2(ss);
return 0;
}
錯誤:g++ -std=c++14 bind.cpp
:
bind.cpp:14:32: error: no matching function for call to ‘std::function<void()>::function(const std::_Bind<std::_Mem_fn<void (c::*)(std::__cxx11::basic_stringstream<char>)>(c*, std::__cxx11::basic_stringstream<char>)>&)’
std::function<void()> f(bound);
^
bind.cpp:30:31: error: no matching function for call to ‘std::function<void()>::function(const std::_Bind<void (*(std::__cxx11::basic_stringstream<char>))(std::__cxx11::basic_stringstream<char>)>&)’
std::function<void()> f(bound);
^
我與編譯。 我看到here其中接受的答案建議使用lambdas而不是std :: bind,但任何人都可以告訴爲什麼上述代碼中的第一次和第二次使用都不起作用?