我可以假设,从调用堆栈点来看,它调用像功能1结构与功能参数
int function1(T1 t1, T2 t2);
的功能,而不是另一个类似功能2一样的吗?
struct parameters_t
{
Wide<T1>::type t1;
Wide<T2>::type t2;
}
int function2(parameters_t p);
凡宽模板宽Ť到所述处理器的字长。 例如,对于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);
谢谢!
你当然是正确的,并且正在说我是同一件事,但如果你打算使用这个方法并将该向量放入一个args类或结构体中,然后再进一步模板化,我会更进一步稍后您可以添加更多不同类型的参数,而无需对API进行任何更改。 – 2010-02-17 00:52:05
@San Jacint:哦,是的,这个主题肯定有不少变化。底线是弄清楚你真正需要什么,然后做(直接)。如果你对编译器说谎,它会得到它的报复,并且试图将单个参数传递给定义了一个结构的东西(反之亦然)直接落入该类别中。 – 2010-02-17 03:09:48
好的。它的工作原理是因为我使用了gcc,它将参数从右到左推进,但确实在不同平台之间的注册使用情况存在差异。 我不希望编译器稍后对我进行报复:) 谢谢你们两位! – 2010-02-17 10:13:13