- C++相談室 part115 [転載禁止]©2ch.net
649 :デフォルトの名無しさん[sage]:2015/01/25(日) 10:22:42.68 ID:ETJbvR7U - テンプレート引数で値を受け取る場合に、文字列リテラルと文字列配列を区別する方法はありますか?
template < size_t N > void foo(const char (&s)[N]) とすれば文字列へのポインタと配列を区別することはできたのですが、リテラルと区別する方法が欲しいです。
|
- Visual Studio 2013 SP6©2ch.net
753 :デフォルトの名無しさん[sage]:2015/01/25(日) 10:56:34.82 ID:ETJbvR7U - え?VS2013Com使えば出来るよ
|
- C++相談室 part115 [転載禁止]©2ch.net
656 :デフォルトの名無しさん[sage]:2015/01/25(日) 12:24:13.51 ID:ETJbvR7U - >>650
直接リテラルを指定した場合のみを区別したいです。 foo("abc") マクロを使えば、リテラルの連結を利用して使い方のミスだけは回避できる、 #define foo(literal) foo_impl("" literal) という方法があるようなのですが、テンプレートとオーバーロードでできないでしょうか?
|
- C++相談室 part115 [転載禁止]©2ch.net
659 :デフォルトの名無しさん[sage]:2015/01/25(日) 14:47:27.34 ID:ETJbvR7U - >>658
ありがとうございます。 難しそうですね。 もしかするとconstexprで何かできるかもしれないので、対応したコンパイラが手に入ったらまた試してみます。
|
- C++相談室 part115 [転載禁止]©2ch.net
662 :デフォルトの名無しさん[sage]:2015/01/25(日) 16:12:10.04 ID:ETJbvR7U - >>661
元々の目的は「プログラム終了まで寿命を持っており、変更されない文字列だけを特別扱いしたい」ということでした。 リテラルなら十分条件だと思ったのですが、もし別の方向で実現可能ならば全く問題ないです。 ただ、「それ専用の名前」を関数やマクロにつけるのではなく、 他の文字列用の関数との使い分けを意識せずにオーバーロードさせたいです。
|