可変パラメータリストで遊んでいました。以下のコード スニペットを参照してください。ここでは、Foobar 内のユーザー定義型の内容を印刷しようとしています。
template<typename T>
void Foobar(const T& obj,int nNumberofParams,...)
{
va_list args;
va_start(args,nNumberofParams);
for(int i =0 ; i < nNumberofParams; i++)
{
T val = va_arg(args,T);
val.PrintContent();
}
va_end(args);
}
//! Template Specialization for int
template<>
void Foobar(const int& ,int nNumberofParams,...)
{
va_list args;
va_start(args,nNumberofParams);
cout << "Foobar specialize for int called" << endl;
for(int i =0 ; i < nNumberofParams; i++)
{
int val = va_arg(args,int);
cout << val << endl;
}
va_end(args);
}
主に私はこのようなことをしています
int _tmain(int argc, _TCHAR* argv[])
{
//! MyClass implements PrintContent
MyClass obj,obj1(1,2,0),obj2(3,4,1),obj3,obj4(5,5,2),obj5(6,6,3);
Foobar(obj,5,obj1,obj2,obj3,obj4,obj5);// Works fine
//! Can't this be simpler ?
int i = 3;
int &j = i;
Foobar(j,3,1,2,3);// Template specialization for int
//! Can't this be simpler ?
double d = 3.0;
double& d1 = d;
Foobar(d1,3, 1.0,2.0,3.0);// Template specialization for double
return 0;
}
変数リストを取る関数にデフォルトの引数を持つことは可能ですか? はい、それではどうすればいいですか?