我可以假设,从调用堆栈点视图来看,调用function1之类的函数是一样的
int function1(T1 t1, T2 t2);
而不是像function2那样?
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);
谢谢!
答案 0 :(得分:2)
问题1.两个函数调用不一定相同 - 从左到右推动参数的调用约定都被广泛使用。
听起来你想要创建一个带有可变数量的可变类型参数的函数。要做到这一点,我需要以std::vector<boost:any>
为参数。
答案 1 :(得分:1)
你问的实际上是两个不同的问题。我不认为这两个方法在调用堆栈上看起来是一样的,但是为了你需要将参数传递给一个由指针调用的函数,它可以工作。
您应该考虑通过引用或指针传递它。一遍又一遍地穿过一个大型结构将是低效的。