0

-std=c++11フラグを設定してGCC4.7.1を使用して以下をコンパイルしようとしています。

std::map<std::string, auto> myMap;

さまざまなタイプ(int string、bool)およびサブ構造(list、map)の大量のJsonデータを含むオブジェクトを作成しようとしているため、コンパイル時にフィールド値のタイプを宣言できません。時間なので、autoキーワードを使ってみようと思いました。

しかし、コンパイルしようとすると、次のようになります。

error: invalid use of ‘auto’
error: template argument 2 is invalid
error: template argument 4 is invalid
error: unable to deduce ‘auto’ from ‘&lt;expression error>’

テンプレート引数として使用する特別な方法はありautoますか、それとも不可能ですか?

4

2 に答える 2

7

私はあなたが探しているのはboost::anyだと思います。

std::map<std::string, boost::any> myMap;

autoコンパイル時に評価され、動的実行時型として使用することはできません。

于 2012-08-29T11:43:12.953 に答える
3

それは単に不可能です。背後autoにあるタイプは、何かから推測する必要があります。decltypeそれに最も近いのは、何らかの表現を使用することです。

std::map<std::string, decltype(some expression)> myMap;

ただし、decltypeここでは型に解決されます。これは、コンパイル時に変更することはできません。

于 2012-08-29T11:36:47.580 に答える