Структура с параметрами функции - PullRequest
1 голос
/ 17 февраля 2010

Можно ли предположить, что с точки зрения стека вызовов то же самое, что вызывать функцию, подобную function1

int function1(T1 t1, T2 t2);

, чем к другому, как функция2?

struct parameters_t
{ 
    Wide<T1>::type t1;
    Wide<T2>::type t2;
}

int function2(parameters_t p);

Где, Широкий шаблон шириной T до длины слова процессора. Например, для 32-разрядных процессоров:

template<typename T, bool b = sizeof(T) >=4 >
struct Wide
{
    typedef T type;
};

template<typename T>
struct Wide<T,false>
{
    typedef unsigned int type;
};

Мне нужно сделать что-то вроде этого:

typedef int (*function_t)(parameters_t);

function_t function = (function_t) &function1;

parameters_t params;
// initialize params
function(params);

Спасибо!

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Вопрос 1. Нет, два вызова функций не обязательно одинаковы - соглашения о вызовах, которые передают параметры справа налево и слева направо, широко используются.

Звучит так, будто вы хотите создатьфункция, которая принимает переменное число переменных типа параметров.Чтобы сделать это, я бы взял что-то вроде std::vector<boost:any> в качестве параметра.

1 голос
/ 17 февраля 2010

То, что вы спрашиваете, на самом деле два разных вопроса. Я не думаю, что есть какая-либо гарантия, что эти два метода будут выглядеть одинаково в стеке вызовов, но для ваших целей передачи параметров в функцию, вызываемую указателем, это работает.

Вы, вероятно, должны рассмотреть возможность передачи через ссылку или указатель. Передача большой структуры снова и снова будет неэффективной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...