5

いくつかのコードをコンパイルしようとしています。ヘッダーの 1 つで、グローバル名前空間に次の関数があります。

template <class T>
inline
T
to_type<T> (const std::string& string)
{
    std::stringstream ss(string);
    T value;
    ss >> value;
    return value;
}

しかし、どういうわけか、これは g++ エラーをスローしますexpected initializer before '<' token(SO フォーマットとの競合を解決するために引用符の 1 つを変更しました)

このエラーがわかりません。to_type有効な初期化子ではないのはなぜですか? この記号が使われたのはこれが初めてです。このスニペットを修正するにはどうすればよいですか?

4

1 に答える 1

4

正しい構文は次のとおりです。

template <class T>
inline
T
to_type(const std::string& string)
{
    std::stringstream ss(string);
    T value;
    ss >> value;
    return value;
}

(注の<T>後にはありませんto_type)。

<>基本テンプレートを宣言するときではなく、特殊化を宣言するときに宣言される関数 (またはクラス) の名前の後にのみ配置されます。

于 2012-06-06T09:21:49.230 に答える