结构与功能参数

时间:2010-02-17 00:31:28

标签: c++ templates

我可以假设,从调用堆栈点视图来看,调用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);

谢谢!

2 个答案:

答案 0 :(得分:2)

问题1.两个函数调用不一定相同 - 从左到右推动参数的调用约定都被广泛使用。

听起来你想要创建一个带有可变数量的可变类型参数的函数。要做到这一点,我需要以std::vector<boost:any>为参数。

答案 1 :(得分:1)

你问的实际上是两个不同的问题。我不认为这两个方法在调用堆栈上看起来是一样的,但是为了你需要将参数传递给一个由指针调用的函数,它可以工作。

您应该考虑通过引用或指针传递它。一遍又一遍地穿过一个大型结构将是低效的。