c ++模板使用不带参数

时间:2016-09-29 02:31:46

标签: c++ templates inheritance

我有模板类

template <class T>
class Dao { ... }

和 几个类继承自它。 (BarDao和FooDao)

然后,还有一个名为Server的类必须动态地使用BarDao或FooDao。

所以,

class Server {
    Dao * dao;
    Server(Dao * dao) {this->dao = dao;}
}

我收到一个抱怨没有参数的编译错误。 我怎么能避免这个错误?

的增添。

我使用该模板的原因是为了完成以下任务:

  1. 我想要一个有方法的抽象类

    T compute();

  2. BarDao有一个方法

    SomeClass compute();

  3. FooDao有一个方法

    SomeOtherClass compute();

  4. 有没有比使用模板更好的方法?

    对不起,如果问题愚蠢。我是一名c ++初学者。

2 个答案:

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

演示:http://ideone.com/GNcjMm

答案 1 :(得分:0)

在这种情况下,Dao是一个模板而不是一个类。你可能想在你给我们Dao的例子中改变你的代码:

Dao<int> dao;

另一个想法指出。你不能有一个指向模板的指针,但你可以指向一个类。如果你急于使用指针,你也可以使用一个类。希望这有帮助!

替代方法可以是创建一个像“int”这样的字符串,并根据你可以调用if / else方法来调用哪个方法。对于一种方法,您将具有不同的返回值(多态)。对不起,我会给你一个代码示例,但我正在通过电话回答你。 Here是关于多态性的好文章。多态性是我现在可以想到的模板的丑陋变通方法。我可能会在稍后更新答案。希望这有帮助!