для намерения, проверьте пояснение ниже:
У меня есть класс с несколькими функциями -членами. Каждый из них имеет не только различное количество параметров, но и разные типы возврата. < /P>
Допустим, мой класс такой: < /p>
class Pipe
{
public:
Pipe() {}
int MethodA()
{
std::cout
Допустим, у меня также есть следующий класс: < /p>
class PipelineMethodResult
{
public:
//template
PipelineMethodResult(int result) : result_(result) {}
template
void PackReturnValue(T returnValue)
{
}
private:
int result_;
unsigned char returnValue[];
};
template
void PipelineMethodResult::PackReturnValue(int returnValue)
{
std::cout
MethodA
Packing int 0
0
MethodA1, a: 15
Packing float 1.5
1.5
< /code>
И мы можем сделать это также: < /p>
std::map callableMap = {
{ "MethodA", AnyCallable(g1) },
{ "MethodA1", AnyCallable(g2) }
};
Pipe p;
callableMap["MethodA"](&p);
callableMap["MethodA1"](&p, 30);
< /code>
снова получение того, что мы ожидаем: < /p>
MethodA
Packing int 0
0
MethodA1, a: 30
Packing float 1.5
1.5
< /code>
Мой вопрос - следующий:
Как я могу сделать это проще. Для меня может быть два варианта: < /p>
либо модифицируйте все, что можно обработать функции членов. /> < /ul>
Идея состоит в том, чтобы иметь карту функций -членов для методов трубы. < /p>
Заглушка), я хочу, чтобы сервер был в состоянии предоставить динамический список методов, так что клиент только должен получить этот список и динамически заполнять методы (сервер - C ++, клиент C#). < /p>
Как я хочу вызвать методы сервера, используя строку, проходящую через плоские буфты, мне нужно, чтобы они были способны для того, чтобы поставить в это, и для этого, и для этого, и для этого, и для этого, и для этого, и для этого, и для этого. Обертка намеревается обернуть реальный тип результата, который будет возвращен в плоский буфер для клиента, что позволяет разместить AnyCallable на карту.AnyCallable A = std::function{&Pipe::MethodA};
< /code>
к чему -то более простому: < /p>
std::map callableMap = {
{ "MethodA", AnyCallable(&Pipe::MethodA) },
{ "MethodA1", AnyCallable(&Pipe::MethodA1) }
};
solution
Спасибо @463035818_is_not_an_ai, я пришел к решению. Можно найти здесь (https://godbolt.org/z/5978oq75h) и ниже.
#include
#include
#include
#include
#include
class Pipe
{
public:
Pipe() {}
int MethodA()
{
std::cout
Подробнее здесь: https://stackoverflow.com/questions/794 ... -functions