Предположим, у меня есть класс с двумя функциями-членами:
#include <string>
#include <vector>
using namespace std;
class MyClass{
MyClass(){
MyCommandServer server;
server.addToCollection(&[](string a)->string{return helloWorld();});
server.addToCollection(&[](string a)->string{return to_string(add(stoi(a[0]),stoi(a[1])));});
while(true){
server.pollForCommand();
doSomethingElse();
}
}
string helloWorld(){
return "Hello World!";
}
int add(int a, int b){
return a+b;
}
};
И еще один класс, который создается в первом:
typedef string (*MyFunctionPointer)(string);
class MyCommandServer{
MyCommandServer(){}
void addToCollection(MyFunctionPointer ptr){
functionCollection.push_back(ptr);
}
void pollForCommand(){
string newCommand = checkForCommand(&args);
if(newCommand.size()&&isValidCommand(newCommand[0])){
sendResponseToClient(functionCollection[newCommand[0]](newCommand.substr(1)));
}
}
string checkForCommand();
bool isValidCommand(char);
void sendResponseToClient(string);
vector<MyFunctionPointer> functionCollection;
};
Как мне передать мои первые два метода addToCollection (MyFunctionPointer)? Мне было интересно, возможно ли что-то подобное примеру. Моя цель состоит в том, чтобы иметь возможность вызывать функции MyClass только с их индексом в контейнере и выяснять, как использовать предоставленные аргументы, если вообще используются, с помощью поставляемой лямбда-функции. Предполагается, что это позволит включить класс Command Server, где я получу символ в качестве указанного индекса и аргументы, если таковые имеются, в виде строки через UDP.
Однако компилятор не разрешает мне передавать ссылку на лямбду.
Создание оператора switch-case в MyServerClass, где я вручную ввожу код, который я вставил в лямбда-выражения в примере, неосуществимо, поскольку класс Server не знает о своих родительских методах.
Возможно ли что-то похожее на приведенный пример?
Извините, если пост не соответствует стандартам, мой первый здесь.
Спасибо за вашу помощь!