1

假设我有以下函数,它产生的值是代码中许多其他函数所需要的:

float mean(foo param1, bar param2);

我的其他功能如下所示:

float foobar(foo param1, bar param2, float meanValue);

我想要做的是以下内容:

float foobar(foo param1, bar param2, float meanValue = mean(param1, param2));

虽然将函数作为默认参数传入是合法的,但编译器(VS2008)抱怨param1param2没有声明 - 因为参数从meanValue开始从右到左推入堆栈。当然,我不能颠倒参数的顺序,因为在这种情况下,我将无法为第一个参数指定默认值。

我可以传入一些像 -10000 这样的值,让平均值告诉自己调用 mean() 函数;或者我可以重载每个函数(并且有 10+ 个要重载),但这不是很整洁。我认为您可以将函数作为默认参数调用真的很酷,我想知道是否有一种巧妙的方法来完成我想要做的事情。

4

1 回答 1

3

参数被压入堆栈的顺序,或者它们是否被压入,甚至架构上是否存在堆栈,C++标准都没有规定。

你没有提供太多关于为什么你有这么多这样的函数,以及它们有何不同的信息,但也许以下内容将有助于减少重载的数量:

template< typename T1, typename T2 >
float foobar(T1 param1, T2 param2)
{
    return foobar(param1, param2, mean(param1, param2));
}

请注意,如果需要,您也可以创建结果类型和调用的函数,以及mean()函数、所有模板参数。

于 2012-01-04T19:40:29.050 回答