На основе сообщения Как вызвать функцию по ее имени (std::string) в C++? пытался сделать версию с помощью CLASS, но мой подход не работает.
class A {
public:
int add(int i, int j) { return i+j; }
int sub(int i, int j) { return i-j; }
};
typedef int (*FnPtr)(int, int);
int main(int argc, char* argv[]) {
// initialization:
std::map<std::string, FnPtr> myMap;
A a;
myMap["add"] = a.add;
myMap["sub"] = a.sub;
Возвращает эту ошибку:
main.cpp:31:22: error: cannot convert ‘A::add’ from type ‘int (A::)(int, int)’ to type ‘std::map<std::basic_string<char>, int (*)(int, int)>::mapped_type {aka int (*)(int, int)}’
main.cpp:32:22: error: cannot convert ‘A::sub’ from type ‘int (A::)(int, int)’ to type ‘std::map<std::basic_string<char>, int (*)(int, int)>::mapped_type {aka int (*)(int, int)}’
Кто-нибудь знает, в чем ошибка?
myMap["add"](1, 2)
), потому что это не имеет смысла. Вместо этого вам нужно каким-то образом объединить член классаA::add
и экземпляр объектаa
. - person Kerrek SB   schedule 20.10.2013typedef int (*FnPtr)(int, int);
наtypedef int (A::*FnPtr)(int, int);
и назовите его какa.*(myMap["add"])(42, 1337);
. Ужасно, не так ли? - person   schedule 20.10.2013std::function
+std::bind
- person Kal   schedule 20.10.2013class A
? - person Kerrek SB   schedule 20.10.2013class A
может выполнять множество функций - person Alan Valejo   schedule 20.10.2013