c++模板不带参数使用

标签 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 计算();

  2. BarDao 有一个方法

    SomeClass compute();

  3. FooDao 有一个方法

    SomeOtherClass compute();

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

抱歉,如果问题很愚蠢。我是 C++ 初学者。

最佳答案

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

关于c++模板不带参数使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39760445/

相关文章:

css - 在动态创建的 Handlebars 模板中添加一个 css 类

oop - 如何在 Matlab 中访问父类(super class)的常量属性?

c++ - 为以下内容建立一个 QString 指针?

c++ - 使用可变参数模板限制模板类的受支持类型

c++ - 包含来自另一个文件的运算符重载

c++ - 检查类是否具有带有特定模板的operator()的方法

c++ - 模板化派生类的特化函数模板

c++ - 什么是构造函数继承?

c# - 对象继承、密封方法覆盖和 C#

c++ - 将 ptr 显式转换为 "ptr to a ptr"