1
Kann ich in einem Container eine Liste von Elementfunktionen speichern und sie später aufrufen, wenn sie eine andere Anzahl von Argumenten haben.Anruffunktionen mit mehreren Argumenten
Ich fühle, dass ich gerade etwas kleines vermisse, aber das ist, wie weit ich habe.
template<typename T>
class RPCServer
{
public:
RPCServer(const std::string host, const int port) {}
// Store the method pointers
template<typename F>
void register_method(const T discriminant, F func) {
m_callbacks.emplace_back(discriminant,func);
}
template<typename... Args>
void run(T subject, Args... args) {
auto func = std::find(std::begin(m_callbacks), std::end(m_callbacks), subject);
if (func != std::end(m_callbacks)) {
auto res = std::get<1>(*func)(args...); // This doesn't compile
}
}
~RPCServer() = default;
private:
// Store
std::vector<std::tuple<T, boost::any>> m_callbacks;
};
class Impl
{
public:
// RPC methods
void send_data(std::string data) {}
int get_details(int input) { return 0; }
};
using namespace std::placeholders;
Impl impl;
RPCServer<std::string> server("localhost",1234);
server.register_method("foo", std::bind(&Impl::send_data, impl, _1));
server.register_method("bar", std::bind(&Impl::get_details, impl, _1));
server.run("foo", "blah"s); // This should call send_data with 'blah' as a arg
auto result = server.run("bar", 1); // Call get_details passing in 1
hier einrichten Wie speichere ich/eine Reihe von Mitglieds sicher geben Funktionen abrufen.
, wenn Sie hinzugefügt 'auto omg2 = funcCaller (printSomeMore)' die verschiedene args nahm/Rückkehr würden Sie in der Lage sein, es zu speichern, in einer 'Vektor foo = {omg, omg2 } '? – Ronnie
Vielleicht kann Polymorphismus dazu ausgenutzt werden. IMHO, es ist hier viel einfacher, lokale FunCaller in RPCServer :: run zu konstruieren, und dann die Argumente ... zu übergeben. – bipll
Hier: https://sourceforge.net/projects/preludecpp/ - Ich schreibe eine Bibliothek, die dies in C++ 03 ermöglicht, mit einer ernsthaften Vorstellung, dass Callable-Arity immer durch eine Zahl begrenzt ist, standardmäßig 9. Sie können verschiedene Funktionen verschiedener Art und Art annehmen und sie in ein Paar mit Helfern verwandeln. – bipll