Как вызвать автоматическую функцию Symforce с помощью пользователя, определенного типа?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как вызвать автоматическую функцию Symforce с помощью пользователя, определенного типа?

Сообщение Anonymous »

Предположим, у меня есть функция 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
Ответить

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

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

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

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

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