这个成语帮助我解决了几个问题,但我不知道这是怎么称呼的,谷歌搜索没有帮助。其目的是在异构集合中存储不同的模板类,众所周知的示例用法是std::any
。
class TemplateBase
{
public:
virtual void f() = 0;
virtual ~TemplateBase() {}
};
template<typename T>
class TemplateImplementation : public TemplateBase
{
T data;
public:
virtual void f() override
{
// some T-specific implementation
std::cout << data << std::endl;
}
};
std::vector<std::unique_ptr<TemplateBase>> collection;
collection.emplace_back(new TemplateImplementation<int>{1});
collection.emplace_back(new TemplateImplementation<std::string>{"hello"});