加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 动态编译时基类

发布时间:2020-12-16 07:07:02 所属栏目:百科 来源:网络整理
导读:请注意这只是一个关于模板语法的问题 – 不是一般的面向对象,多态设计.该示例是用于该目的的制造 假设我有一个基类: class A: public B{...}; 我用它… A a;a.DoSomething(); 如果我想做这样的事情,能够有一个A的编译时推导,不仅来自B而且来自其他类.所以我
请注意这只是一个关于模板语法的问题 – 不是一般的面向对象,多态设计.该示例是用于该目的的制造

假设我有一个基类:

class A: public B
{
...
};

我用它…

A a;
a.DoSomething();

如果我想做这样的事情,能够有一个A的编译时推导,不仅来自B而且来自其他类.所以我可以像这样使用它:

A<B> a;                // like class A : public B
a.doSomething();

A<C> ac;              // like class A : public C
ac.DoSomething();

我可以这样做吗?

template <typename BASECLASS>
class A : public BASECLASS
{
...
};

让我们假设我的构造函数有一个参数,我知道我用于基类的任何模板都有相同的签名.如果是这样,这是* .h文件,你怎么处理* .cpp文件?初始化构造函数是否合法?

A::A(int param) : BASECLASS(param)
{

}

请注意这只是一个关于模板语法的问题 – 不是一般的面向对象,多态设计.

解决方法

您的示例中的语法正确.这是一个最小的可编译示例.

template <class Base>
class A : public Base {

};

class B {
public:
  void doSomething() {}
};
class C {
public:
  void doSomething() {}
};

int main() {
  A<B> a;                // like class A : public B
  a.doSomething();

  A<C> ac;              // like class A : public C
  ac.doSomething(); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读