我正在使用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。然后重新开始。
有没有办法做到这一点?