C ++映射与不同类型的模板

时间:2019-06-26 13:48:37

标签: c++ templates containers

我正在使用Google Protobuf,并且想在“基础”类中使用创建的类。我为此创建了一个模板,但是我想在其中添加对其他类的引用(可以是对一个或多个类的引用)。示例:

template<typename T>
class SomeClass
{
    public:
        std::shared_ptr<T> get(int id)
        {
            // Of course this contains more checks, but that is not important for the example.
            items.find(id).second();
        }

        void add (std::shared_ptr<T> item)
        {
            items.emplace(item.id(), item)
        }

    private: 
        std::map<int, T> items;
}

这正常。但是现在我想添加其中包含SomeClass项目的地图或矢量或whtvr,但是这里的T每次都不同。所以我想能够做到:

SomeClass<Person> person;
SomeClass<Animal> animal;
SomeClass<Plant> plant;
person.add(animal);
person.add(plant);

add函数应如下所示:


private: 
    std::vector<SomeClass<???>> someContainer;

public:
    void add(SomeClass<???> item)
    {
        someContainer.push_back(item);
    }

可能要知道:T是Google protobuf消息。

我试图添加一个派生SomeClass的类。但是,当您要执行“获取”操作时,基类也需要具有T。然后重新开始。

有没有办法做到这一点?

0 个答案:

没有答案