3

私はC++に少し慣れていませんが、可変引数の受け渡しに疑問が1つあります。以下のサンプルコードで述べたように(このコードはまったく機能しません。他の人が私の質問を理解するために、このように組み立てました)、1つのパラメーターと2つのパラメーター(パラメーターのオーバーロード)を持つ2つの関数funcがあります。mainからfuncを呼び出しています。その前に、2つのパラメーターまたは1つのパラメーターを呼び出す必要があるかどうかを確認しています。ここに問題があります。私は、elseifステートメントでそれぞれ2つの関数を呼び出すことができることを知っていますが、1つの関数だけで管理できるかどうかを知りたいと思っています。(以下のコードでは、intではなくstringを渡しています。これは、他の人が目的を理解するためだけのものです。

#include<iostream.h>
#include <string>

void func(int, int);
void func(int);

void main()
{
   int a, b,in;

   cout << "Enter the 2 for 2 arg, 1 for 1 arg\n";
   cin << in;

   if ( in == 2)
   { 
      string pass = "a,b";
   }
   elseif ( in == 1)
   {
      string pass = "a";
   }
   else
   {
      return 0;
   }

   func(pass);

   cout<<"In main\n"<<endl;
}

void func(int iNum1)
{
   cout<<"In func1 "<<iNum1<<endl;
}

void func(int iNum1, int iNum2)
{
   cout<<"In func2 "<<iNum1<<" "<<iNum2<<endl;
}
4

2 に答える 2

4

Ronald の説明に従って stdarg メソッドを使用できます。または、引数のベクトルを取る関数を使用できます。最初に引数をベクトルにプッシュしてから、次の関数を呼び出します。

func(const vector<int>& argv) {
  for (vector<int>::const_iterator iter = argv.begin(); iter != argv.end(); ++iter) {
    // Get the arguments
  }
  // Do what you want ...
}
于 2012-10-25T04:59:22.643 に答える
3

stdarg ライブラリに興味があるかもしれません。使用例は次のとおりです。

#include <cstdarg>
#include <iostream>

using namespace::std;

void func(int, ...);

int main(void) {
  func(1, 10);
  func(2, 20, 30);
  return 0;
}

void func(int num_args, ...) {
  va_list ap;

  va_start(ap,num_args);
  for(size_t loop=0;loop<num_args;++loop) {
    if(loop>0) cout << " ";
    cout << va_arg(ap,int);
  }

  va_end(ap);

  cout << endl;
}
于 2012-10-25T04:41:19.537 に答える