这个问题对我来说似乎有些愚蠢,但我找不到任何类似的问题,如果它是微不足道的话,那就很抱歉
让我们说我们有一个结构:
this.searchService.getSearchbyDistrictCategoryCity(this.searchObj)
.subscrie(data=>{
this.searchedResults = data;
this.searchService.searchResults = data;
// or this.messages = data
this.messages = this.searchService.searchResults;
},error=>this.errorMessage= <any>error);
现在在其他地方:
struct C {
static void f(int i) { std::cerr << (i + 15) << "\n"; }
static void f(std::string s) { std::cerr << (s + "15") << "\n"; }
};
我得到的错误是
错误:从''转换为 请求非标量类型'std :: function'
有没有办法在这样的上下文中使用std :: function?我错过了什么?
感谢
答案 0 :(得分:4)
std::function<void(int)> f1 = C::f; // this does not compile
C::f
是一个重载集,它没有地址。您可以围绕它创建一个包装器FunctionObject
:
std::function<void(int)> f1 = [](int x){ return C::f(x); };
void (*f2)(std::string s) = C::f; // this compiles just fine
此行汇编是因为您通过明确地将其分配给std::string
指针来“选择”C::f
重载集的void(*)(std::string)
重载。 / p>
您可以为f1
执行相同的操作:
std::function<void(int)> f1 = static_cast<void(*)(int)>(&C::f);