Аргументы функции располагаются в памяти так же, как структуры?C++

Программы на C++. Форум разработчиков
Anonymous
 Аргументы функции располагаются в памяти так же, как структуры?

Сообщение Anonymous »

Вопрос возникает из следующей идеи.
Существует функция, которая действует как прокси/перехват истинной функции, например

Код: Выделить всё

int foo(int a, float b, void* c, std::string d, int& e, int f) {
// possible bookkeeping here
// ...

// notice missing "a" argument, passing a *tail* of all arguments
return foo_impl(b, c, d, e, f);
}
Невозможно изменить интерфейс foo, можно изменить foo_impl.
Теперь я хотел бы вызовите foo_impl с минимальными накладными расходами, в частности с экономией на копировании аргументов, например

Код: Выделить всё

struct FooArgs {
float b;
void* c;
std::string d;
int& e;
int f;
};

int foo_impl(FooArgs* args);

int foo(int a, float b, void* c, std::string d, int& e, int f) {
// ...
auto args = FooArgs{b, c, d, e, f};
return foo_impl(&args);
}
Не повезло, все равно нужно упаковать все аргументы в FooArgs.
Должна быть возможность получить указатель на foo:: аргумент b и интерпретировать его как FooArgs*

Код: Выделить всё

int foo(int a, float b, void* c, std::string d, int& e, int f) {
// ...
return foo_impl(reinterpret_cast(&b));
}
Я не пробовал это в действии, но чувствую неопределенное поведение. Так ли это?

Подробнее здесь: https://stackoverflow.com/questions/790 ... as-structs

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