c++ - 按位置引用函数的参数?

标签 c++

我不确定我知道怎么问这个问题。

假设我有一个函数

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/

相关文章:

c++ - 调试 Boost 序列化段错误问题

c++ - 如何实现通用 switch/case,它也适用于一般 C++ 类型并且语法相似?

c++ - 指向函数成员的指针

c++ - Getline 无法按预期处理字符串

c++ - 后增量行为

c++ - 如何释放 boost::unordered_map 占用的空闲内存?

c++ - 调用单例库

C++ 类构造函数参数 : How to access members and methods from another class instance without copying?

c++ - 在结构中指定设备特定功能

c++ - 如何阻止 ReSharper 在 C++ 中格式化多行注释