按位置引用函数的参数?

Ste*_*ven 2 c++

我不确定我知道怎么问这个.

说我有功能

void myFunc ( int8 foo, float bar, int whatever )
{
...
}
Run Code Online (Sandbox Code Playgroud)

是否有一种通过其位置引用特定参数的快速方法?

void myFunc ( float foo, float bar, float whatever )
{
   float f;
   f = ARG[1]; // f now equals bar
}
Run Code Online (Sandbox Code Playgroud)

有什么影响?

跟进:

谢谢你们的答案.我想我错了.我发现奇怪的是c ++不允许这样做,因为perl和一些伪语言(我特别想到AutoIt).至于"为什么"?只是使用一个简单的循环来完成它们.我认识到在正常情况下有很多更好的方法可以达到这个目的,但是我最不愿意在我的小世界之外修改任何人的代码.换句话说,我无法控制调用代码.它将输入推到我的喉咙,我必须尽可能地管理它们.所以我不能在调用我的函数之前循环.无论如何,它显然是一团糟,并没有那么多变量,所以我只是重复代码.没什么大不了的.感谢您的评论和有趣的建议.

Kir*_*sky 8

可能是boost ::元组是你需要的吗?

#include <boost/tuple/tuple.hpp>

void myFunc ( const boost::tuple<int, float, double>& t )
{
   float f;
   f = boost::get<1>(t); // f now equals bar
}

int main()
{
    myFunc( boost::make_tuple( 1, 2.0f, 3.0 ) );
}
Run Code Online (Sandbox Code Playgroud)

它为您提供静态类型检查,您可以按位置获取元素.元组是未来标准的一部分.它可以用作std::tr1::tuple一些编译器.

如果所有参数都是相同的类型,您可以使用std::vector:

#include <vector>

void myFunc ( const std::vector<float>& t )
{
   float f;
   f = t[1]; // f now equals bar
}

int main()
{
    std::vector<float> f_array;
    f_array.push_back( 1.0f );
    f_array.push_back( 2.0f );
    f_array.push_back( 3.0f );
    myFunc( f_array );
}
Run Code Online (Sandbox Code Playgroud)