c ++ varargs/variadic函数有两种类型的参数

jai*_*lis 3 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.      */
Run Code Online (Sandbox Code Playgroud)

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

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

Che*_*Alf 11

因为你正在做c ++,所以不需要使用无类型的C风格的可变参数函数.

你可以简单地定义一个可链接的方法类似

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

      Inserter& operator()( int i )
      {
          cout << i << endl;
          return *this;
      }
  };
Run Code Online (Sandbox Code Playgroud)

然后使用喜欢

Inserter()( "blah" )( 42 )( "duh" )
Run Code Online (Sandbox Code Playgroud)

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

干杯和hth.,