Предположим, у меня есть функция Python foo () , что я автоматически генерирую в C ++ с функциональностью Symforce CodeGen. Это сложная функция с большим количеством параметров, поэтому я хочу передать структуру Params вместо 20+ отдельных скалярных аргументов. Я также хотел бы использовать существующую структуру params , используемая остальной частью кодовой базы, вместо копирования данных в автоматическую сгенерированную структуру символов. Double , который может быть разбивателем сделки, если я не могу заменить тип. Говоря об этом, неясно, как изменить этот тип для моего пользователя, определенного Params struct.
Играет вокруг, я могу получить аналогичные результаты с такими проблемами игрушек, как:
Код: Выделить всё
@dataclasses.dataclass
class Params:
a: np.float32 # Single precision is not respected.
b: np.float32
def foo(params: Params):
return params.a
< /code>
...which автоматически генерирует следующее: < /p>
struct params_t {
double a;
double b;
}
// ...
template
Scalar Foo(const foo::params_t& params) {
// ...
Scalar _res;
_res = params.a;
return _res;
} // NOLINT(readability/fn_size)
Опять же, нет очевидного способа замены params_t и, отказавшись от замены оптового типа, нет очевидного способа изменить тип полей с двойного float .
генерирование из -за функции Python> для картирования SP.Pope3 sym :: pose3 , так что есть явно a способ сделать это, но, похоже, он включает в себя более глубокий спелунки в исходный код.
Подробнее здесь:
https://stackoverflow.com/questions/796 ... fined-type