для намерения, проверьте пояснение ниже:
У меня есть класс с несколькими функциями -членами. Каждый из них имеет не только различное количество параметров, но и разные типы возврата. < /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
C ++ 20 Карта функций обернутых элементов ⇐ C++
Программы на C++. Форум разработчиков
1758571826
Anonymous
для намерения, проверьте [b] пояснение [/b] ниже:
У меня есть класс с несколькими функциями -членами. Каждый из них имеет не только различное количество параметров, но и разные типы возврата. < /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) }
};
[b] solution [/b]
Спасибо @463035818_is_not_an_ai, я пришел к решению. Можно найти здесь (https://godbolt.org/z/5978oq75h) и ниже.
#include
#include
#include
#include
#include
class Pipe
{
public:
Pipe() {}
int MethodA()
{
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79486712/c20-map-of-wrapped-member-functions[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия