c++の関数テンプレートと参照
関数テンプレートでは、型がバインドされるようなので、
こんな書き方ができるみたいです。
template <size_t N> unsigned int foo(const char (&str)[N]) { return N; } int main(void) { std::cout << foo("foo") << std::endl; return 0; }
これはstrを参照で渡しているからできることですね。
# 型がconst char [4]になります
Cじゃ配列数は渡せないんじゃないかなあ・・・
これの元になったコードを見たときに、
Nがどこから来ているのか分からなかったので、びっくりしました。
というわけで、脈絡もなく階乗のコード置いておきますね。
template <size_t N> unsigned int foo(const char (&str)[N]) { return N * foo(reinterpret_cast<const char (&)[N-1]>(str)); } template <> unsigned int foo(const char (&str)[1]) { return 1; } int main(void) { std::cout << foo("foo") << std::endl; return 0; }