【问题标题】:C++ template for class children possible?类孩子的C ++模板可能吗?
【发布时间】:2022-01-18 17:00:45
【问题描述】:

我有一个父类“ICtl”,它是一个带有纯虚方法的接口,我有多个从它派生的子类(比如说 CButton:public ICtl、CPanel:public ICtl 等)

例如,有一个通用的泛型方法 SetPos(int& x, int& y),但是每个类都有不同的实现。

是否可以编写与子类无关的模板并简单地调用该方法?

例如(显然这段代码是错误的,不会起作用):

template<ICtl* P>
void(P pCtl, int x, int y)
{
   pCtl->SetPos(x,y);
}

但以正确的方式完成?

【问题讨论】:

  • 那为什么不在共同父母中呢?
  • 您的函数可以只接受一个引用或指向父级的指针。例如void myFunc(ICtl&amp; ctl) { ctl.SetPos(0,0); }。你可以把孩子传进去

标签: c++ class templates


【解决方案1】:

您不需要模板。如果ICtl 有一个名为SetPos 的虚方法,您可以通过对基类的引用来传递派生类的实例:

void set(ICtl& pCtl, int x, int y)
{
   pCtl.SetPos(x,y);
}

然而,目前还不清楚这个方法的目的是什么,因为现在调用者必须调用set(pctl,x,y),而他们可以直接调用pctl.SetPos(x,y)

粗略地说,如果您想在其他完全不相关类型的实例上调用名为SetPos 的方法,您将需要一个模板。当实例共享一个提供您想要使用的接口的公共基础时,就不需要模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多