ゆとりーなの日記

日記的な事を書いて行くと思はれる

同期の女の子が可愛すぎるけどアプローチする位ならC++書いてる程度の能力は持ち合わせている

文字列をテンプレートに渡したいと思ったときなんかに思うあれこれです。VC++2010EEでやってみました。

template <char const *Str>
struct hoge {
};

char p1[] = "test1";
char const p2[] = "test2";
extern const char p3[] = "test3";
char const * const p4 = "test4"; 
extern char const * const p5 = "test5"; 

int main() {
  hoge<p1> a;
  hoge<p2> b; // こける
  hoge<p3> c;
  hoge<p4> d; // こける
  hoge<p5> e; // こける
  hoge<"test6"> f; // こける
}

文字列リテラルが渡せないのはやっぱり痛いです。そしてchar const * const系も定数式ではないと弾かれます。char配列が一番手軽なんですが、普通リテラルは書き変えないのでconstにしたいところです。しかしconstを付けると内部リンケージになってしまうんで弾かれてしまいます。仕方なくexternを付けてやる必要があるみたいです。