具有两种类型参数的c++可变参数/可变参数函数

标签 c++ function variadic-functions

我正在尝试实现可变参数函数。我在网上搜索并最终发现大多数示例只处理一种类型的参数(例如计算许多整数的平均值)。我的情况是参数类型不固定。它可以同时涉及 char*、int 或两者。这是我最终得到的代码:

void insertInto(int dummy, ... ) {
   int i = dummy;
   va_list marker;
   va_start( marker, dummy );     /* Initialize variable arguments. */
   while( i != -1 ) {
      cout<<"arg "<<i<<endl;
             /* Do something with i or c here */
      i = va_arg( marker, int);
      //c = va_arg( marker, char*);
   }
   va_end( marker );              /* Reset variable arguments.      */

现在,如果我只需要处理整数,这就可以正常工作了,但是正如您所见,我在注释中有一个 char* c 变量,我想在参数是 char* 的情况下使用它。

那么问题来了,在不知道 va_arg 是 int 还是 char* 的情况下如何处理它的返回值?

最佳答案

由于您使用的是 C++,因此无需使用非类型化的 C 样式可变参数函数。

您可以简单地定义一个可链接的方法,例如

  class Inserter
  {
  public:
      Inserter& operator()( char const* s )
      {
          cout << s << endl;
          return *this;
      }

      Inserter& operator()( int i )
      {
          cout << i << endl;
          return *this;
      }
  };

然后像这样使用

Inserter()( "blah" )( 42 )( "duh" )

具有模板化插入操作的变体,通常用于构建字符串。

干杯,

关于具有两种类型参数的c++可变参数/可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4904327/

相关文章:

c++ - 事件可以跨进程吗?

haskell - 可变参数列表构造函数,如何默认为正确的类型并获得类型安全

java - SCJP问题: Java method overloading with var-args.是什么道理?

c++ - 使标题图标成为资源管理器窗口中的拖动源

c++ - 如何将 tbb concurrent_hash_map 转换为常规 std::map?

c++ - 从数组中删除前导零

c++ - 模板函数内的全局值不改变 [c++]

使用 Boost 函数和 C++ 类方法的 C++ 回调

c - 如何在 C 中打印变量参数的值?

c++ - 飞利浦 hue arduino 控制