0

map2番目の要素として取るジェネリックを作成しようとしていますany datatype。しかし、オブジェクトを作成しようとすると、エラーが発生しますargument list for class template is missing

template<typename T1>
class MAP{
public:
    std::map<string, T1>Hello;

    //MAP(){Hello["Hello"] = 3;}
};

int main()
{
    MAP map1;//Error happens here

    return 0;
}

ここで何がうまくいかないのですか?

4

1 に答える 1

4

問題の説明ではなく、コードサンプルに基づいて、実装しようとしているものはエイリアステンプレートで表現できるようです:

template <typename V>
using MAP = std::map<std::string, V>;

これには C++11 のサポートが必要です。ただし、コード サンプルのように、 のインスタンスは、MAPマップされた type を 1 つしか持つことができません。V

MAP<int> mi;    // std::map<std::string, int>
MAP<double> md; // std::map<std::string, double>

任意の型をマップされた型として保存する場合は、 Boost.Anyのマップの使用を検討できます。

using ANYMAP = std::map<std::string, boost::any>;

ANYMAP m;
m["Hello"] = 42;
m["Bye"] = std::string("message");

ただし、この構造を使用する方法については慎重に検討する必要があります。

于 2013-05-16T05:42:08.727 に答える