例えばC99だとマクロで可変長引数を使えて、…ではなくて
__VA_ARGS__
を使う。
あんまり関係ないけど、テンプレートクラスでもstdargが使えるのかと思ってやってみたら使えた。in vc2008。
PrintfClass.h:
#pragma once
#include <stdarg.h>
template<typename T>
class PrintfClass
{
public:
PrintfClass(void)
{
}
~PrintfClass(void)
{
}
T printfTest(int n, ...) {
va_list args;
T sum = 0;
va_start(args, n);
for (int i = 0; i < n; i++) {
sum += va_arg(args, T);
}
va_end(args);
return sum;
}
};
main.cpp:
#include "PrintfClass.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
PrintfClass<double> a;
double b = a.printfTest(3, 1.0, 2.0, 3.0);
std::cout << b << std::endl;
return 0;
}
結果:
6
さらに関係ないけど、std::coutのフォーマットは「マニピュレータ」を使う。名前さえ分かってれば調べられる。
例えば。
http://www-nh.scphys.kyoto-u.ac.jp/~shoji/Tips/Cpp_Stream.html
以上