【问题标题】:How to read number of arguments - c++如何读取参数的数量 - C++
【发布时间】:2015-10-06 08:04:22
【问题描述】:

通常在我的代码中,我需要对各种变量使用特定的函数,即

object->SetStatus("var1",1); object->SetAddress("var1",&var1);
object->SetStatus("var2",1); object->SetAddress("var2",&var2);
object->SetStatus("var3",1); object->SetAddress("var3",&var3);
...

我的想法是使用一个通过调用它来自动执行此操作的函数,即

object->function(var1,var2,var3,...);

要实现这一点,我必须解决 3 个问题

  1. 调用function()时需要读取参数个数
  2. 我需要以某种方式解析代码中的参数名称
  3. 由于变量的类型不同,我需要想办法让function()类型“透明”

由于我是 c++ 编码的新手,所以我尝试搜索类似的东西,但我找不到任何东西。

非常欢迎任何帮助、建议或评论!

【问题讨论】:

  • 省略号是您要查找的关键字,但一般来说,您通常可以做一些更好的事情来避免使用它们。
  • 你在编写什么应用程序(也许是一些解释器)?在 C++11 还是 C++03 中? var1的类型是什么?
  • @BasileStarynkevitch :我在 CERN 的数据分析框架中编码,称为 root。类型为intdoublefloat,数值为
  • 省略号的问题是被调用的函数无法知道传递了多少参数,这正是 OP 所要求的。您可以添加一个计数作为第一个/第二个参数或具有唯一的参数结束值。
  • 另外,“功能”在做什么?可能有一种不同的方法来解决这个问题,那就是更多的 C++。

标签: c++ arguments


【解决方案1】:

有多种方法可以做到这一点。一种方法是创建一个Base 类,所有变量类型都将从这个基类继承。然后将map<string,Base> 作为参数传递给您的函数。变量的名称将是键,值将是实际变量。遍历映射并为方法设置和分配值。

【讨论】:

    【解决方案2】:

    如果使用 C++11 或 C++14 编码,您可以考虑使用 variadic template。有大量关于该主题的文献(例如this tutorial),这有点棘手(因此在这里解释它是不合理的)。另请阅读parameter pack

    您也可以使用 C 风格 varargs 使用 <cstdarg>

    也许std::initializer_list 也很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-10
      • 2017-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多