テンプレートに文字列を渡してみる。

テンプレートパラメータに指定できるもの - Faith and Brave - C++で遊ぼう
にある通り、テンプレートにはポインタが渡せると言う事で、
以下の様に文字列等を渡してみる。

#include <iostream>

// 文字列 (char*)
char hoge[] = "hoge";
static char fuga[] = "fuga";
const char piyo[] = "piyo";

// 関数テンプレート
template <char* String> //<const char* String> にしてもPrint<hoge>以外はダメ。
void Print()
{
	std::cout << String << std::endl;
}

// main関数
int main()
{
	Print<hoge>();		// OK. 非constのグローバル変数のポインタは渡せる
	//Print<fuga>();	// NG. 非constでもstatic変数のポインタは渡せない
	//Print<piyo>();	// NG. constにするとグローバル変数でも渡せない
	//Print<"moke">();	// NG. 文字列リテラルも渡せない。

	return 0;
}

こんな感じ。
非constのグローバル変数のみ渡せる。

C++のテンプレート引数に文字列を使う方法・・・無理やりです - Decremented Blog
こちらにも渡す方法が・・・でもコレは確かに無理やり(^^;
米欄に同じやり方が載ってますね。問題もある様ですが・・・。


文字列リテラルぐらい渡せて欲しいなあ。