【发布时间】:2017-05-30 14:00:05
【问题描述】:
我试图了解 std::function 是如何工作的,但我无法编译它,我不明白为什么。我认为这与在类中使用 std::function 有关,因为没有类(在全局范围内定义的映射)它可以工作。
这是我收到的错误消息:
functor.cc:37:9: 错误:无法将
‘{{"A", ((C*)this)->C::f}, {"B", ((C*)this)->C::g}, {"C", ((C*)this)->C::h}}’从‘<brace-enclosed initializer list>’到‘std::map<std::__cxx11::basic_string<char>, std::function<bool(const std::vector<std::__cxx11::basic_string<char> >&)> >’
示例代码(没有意义,但它很好地代表了我遇到的问题):
#include <iostream>
#include <map>
#include <functional>
#include <vector>
class C {
public:
bool f(const std::vector<std::string>& s) {
std::cout << "F" << std::endl;
for (auto& i : s) {
std::cout << i << std::endl;
}
return true;
}
bool g(const std::vector<std::string>& s) {
std::cout << "G" << std::endl;
for (auto& i : s) {
std::cout << i << std::endl;
}
return true;
}
bool h(const std::vector<std::string>& s) {
std::cout << "H" << std::endl;
for (auto& i : s) {
std::cout << i << std::endl;
}
return true;
}
std::map<std::string, std::function<bool(const std::vector<std::string>&)> > funcMap {
{"A", f},
{"B", g},
{"C", h}
};
};
int main() {
std::vector<std::string> v{"mno", "pqr", "stu"};
C c;
c.funcMap["A"](v);
}
【问题讨论】:
标签: c++ c++11 std-function