@rustler2000
погромист сикраш

Как в шаблоне тип результата одной функции связать с типом параметра другого метода?

Имеется много кода такого вида, используется C++17:
auto entity = get_entity();
entity->set_prop1( obj1.valueA );
entity->set_prop2( obj2.valueB );
...
entity->set_propX( objN.valueZ );


То есть тип entity выводится из контекста выражения. Да и entity этих вагон, как и мест где этот код используется.
В какой-то момент entity изменились сильно и теперь надо конвертировать obj.value иначе ошибки приведения.

Хотелось бы как-нибудь минимизировать изменения и не указывать явно типы. Я пробовал такой код:
template<typename A, typename B>A convert(B&);
...
entity->set_prop1(convert(obj.valueA));

Но ведь тип значения результата автоматически не выводится.

Еще я пробовал через указатель на метод.
magicSet(entity, &entity->set_prop1, obj.valueA);
// или
magicSet(entity, &decltype(entity)::set_prop1, obj.valueA); // выглядит не оч но можно спрятать за макросом

Но такой код тоже не компилируется.

Как неявно вывести для шаблона тип аргумента метода принимающего результат шаблонной функции?
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы