2017-09-08 3 views
-1

私はそれを短くします。コード:メインでC++引数として単一ティックのテンプレート文字

typedef int NAME; 

template <NAME, typename T> 
class MyTemplate 
{ 
public: 

    MyTemplate(T value) 
    { 
     value_type = value; 
    } 

    T value_type; 

    operator T& const() 
    { 
     return value_type; 
    } 
}; 

とIn:

MyTemplate<'val', int> number1(1); 

私はしばらく前にこの種のコード全体に急落し、私はちょうど記憶でそれを再構築。私にとって混乱しているのは、最初のテンプレート引数としてvalです。また、4文字以上を渡すと、コンパイラは不平を言うでしょう。 テンプレート内のNAMEの目的は何でしょうか。なぜstringを1ダニで渡すことができますか?しばらく前に私が見たコードがtypedefを持っているのかどうかは分かりませんが、それがなければコンパイルできません。

+0

「val」とは何ですか?それは 'char'リテラルではありません。 – user0042

+1

@ user0042これは文字リテラルの一種であるマルチ文字リテラルです。 http://en.cppreference.com/w/cpp/language/character_literal#6を参照してください。 –

+0

@FrançoisAndrieuxこれは有効なものですか? – user0042

答えて

3

'val'は、multi-character literalである。その型はint(通常の文字リテラルがC++で使用されるのでcharではなく)です。その数値は実装定義です。文字列リテラルとは異なります。

関連する問題