C++トリビアルメモ4 テンプレートと可変長と

例えば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

以上

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C++ パーマリンク

コメントを残す

メールアドレスが公開されることはありません。