我有模板类
template <class T>
class Dao { ... }
和 几个类继承自它。 (BarDao和FooDao)
然后,还有一个名为Server的类必须动态地使用BarDao或FooDao。
所以,
class Server {
Dao * dao;
Server(Dao * dao) {this->dao = dao;}
}
我收到一个抱怨没有参数的编译错误。 我怎么能避免这个错误?
的增添。
我使用该模板的原因是为了完成以下任务:
我想要一个有方法的抽象类
T compute();
BarDao有一个方法
SomeClass compute()
;
FooDao有一个方法
SomeOtherClass compute()
;
有没有比使用模板更好的方法?
对不起,如果问题愚蠢。我是一名c ++初学者。
答案 0 :(得分:1)
Dao
不是具体的类,它是类模板。 Dao* dao
未引用不完整类型,它指的是模板。它需要合格。
你声明你希望它自动解决,所以我们只重复你在Dao中所做的事情。
template<class T>
class Dao
{
T t_;
public:
Dao(T t) : t_(t) {}
};
template<class T>
class Server
{
using dao_t = Dao<T>;
dao_t* dao_;
public:
Server(dao_t* dao) : dao_(dao) {}
};
int main() {
Server<int> server(nullptr);
return 0;
}
答案 1 :(得分:0)
在这种情况下,Dao是一个模板而不是一个类。你可能想在你给我们Dao的例子中改变你的代码:
Dao<int> dao;
另一个想法指出。你不能有一个指向模板的指针,但你可以指向一个类。如果你急于使用指针,你也可以使用一个类。希望这有帮助!
替代方法可以是创建一个像“int”这样的字符串,并根据你可以调用if / else方法来调用哪个方法。对于一种方法,您将具有不同的返回值(多态)。对不起,我会给你一个代码示例,但我正在通过电话回答你。 Here是关于多态性的好文章。多态性是我现在可以想到的模板的丑陋变通方法。我可能会在稍后更新答案。希望这有帮助!