C ++ 20 Карта функций обернутых элементовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C ++ 20 Карта функций обернутых элементов

Сообщение Anonymous »

для намерения, проверьте пояснение ниже:
У меня есть класс с несколькими функциями -членами. Каждый из них имеет не только различное количество параметров, но и разные типы возврата. < /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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»