我有一种情况,我试图编写一些C++代码来实现,我想我需要使用模板,但我不确定。我认为我对模板的理解不够好,只是想知道我是否在正确的轨道上。我从来没有实现过需要模板的类。C++模板构建未知类实例列表
我有一个基类需要实例化一个新类,并将其存储在列表中供将来访问。需要实例化的类是从具有一个虚拟方法的基类派生的。类实例化后,调用此方法,并将新实例存储在列表中。提供了另一种获取实例化对象的方法。
说虚拟类名为foo:
class foo
{
public:
virtual void process() = 0;
}
用户将创建一个类吧:
class bar : public foo
{
public:
void process() {};
}
,我认为需要有一个模板类的类:
class Filter<Foo* T>
{
public:
// use value junk to derive foo
// and put the new instance on a std::list
add(Junk* junk);
T get();
private:
std::list<T> mFooList;
}
void Filter::add(Junk* junk)
{
T* foo = new T();
foo.p(junk);
mFooList.push_back(foo);
}
T* Filter::get()
{
if(!mFoolist.empty())
{
T* res = mFooList.back();
mFooList.pop_back();
return res;
}
return nullptr;
}
你这里有几个问题。 'class Filter'不是声明模板的方法。而'void Filter :: add(垃圾*垃圾)'不会以任何方式使用'垃圾',那么它会如何影响存储值呢?而且'mFooList.pop_back();'是一个'void'函数,所以不会实际返回任何东西。 –
我刚刚忽略了如何使用垃圾作为fir过滤器的系数的细节。我只是认为这会给问题增加不必要的复杂性。 – Nefarious
所以,让我理解你的语法更清晰 - 你想'T'是从'Foo'派生的类型作为模板参数传递给'Filter'类,还是我过度解释你的代码? –