Карта C ++ с шаблоном с разными типами - PullRequest
0 голосов
/ 26 июня 2019

Я использую Google Protobuf и хочу использовать созданные классы в «базовом» классе.Я создал для этого шаблон, но я хочу добавить в него ссылки на другие классы (которые могут быть ссылками на 1 класс или несколько классов).Пример:

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;
}

Это работает нормально.Но теперь я хочу добавить карту, вектор или whtvr с элементами SomeClass, но T здесь каждый раз отличается.Поэтому я хочу иметь возможность:

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

Функция добавления должна выглядеть примерно так:


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

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

Может быть, полезно знать: T - это google protobuf Message.

Я попытался добавить класс, из которого происходит SomeClass.Однако, когда вы хотите выполнить 'get', вам также нужно иметь T для базового класса.А потом все начинается снова.

Есть ли способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...