我不确定我知道怎么问这个问题。
假设我有一个函数
void myFunc ( int8 foo, float bar, int whatever )
{
...
}
有没有一种通过位置引用特定参数的快速方法?
void myFunc ( float foo, float bar, float whatever )
{
float f;
f = ARG[1]; // f now equals bar
}
有那种效果吗?
跟进:
谢谢大家的回答。我想我做错了。我觉得很奇怪,C++ 不允许这样做,而 perl 和一些伪语言(我特别想到 AutoIt)会这样做。那么“为什么”呢?只是使用一个简单的循环来遍历它们。我认识到在正常情况下有无数更好的方法可以实现这一点,但我尽我最大的努力不修改我的小世界之外的任何人的代码。换句话说,我无法控制调用代码。它把输入推到我的喉咙里,我必须尽可能地管理它们。所以我不能在调用我的函数之前循环。无论如何,这显然会一团糟,而且没有那么多变量,所以我只是复制了代码。没什么大不了的。感谢您的评论和有趣的建议。
最佳答案
可能是boost::tuple是你需要的吗?
#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 ) );
}
它为您提供静态类型检查,您可以通过其位置获取元素。元组是 future 标准的一部分。它可以用作一些编译器的 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 );
}
关于c++ - 按位置引用函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358508/