【问题标题】:Shared template member function of multiple classes多个类的共享模板成员函数
【发布时间】:2010-10-25 09:36:14
【问题描述】:

我有多个行为完全不同的类,但同时共享必须访问成员变量的公共函数。

所以我想做的是创建一个模板化的成员函数以避免额外的复制粘贴代码重复。

最终的结果应该是这样的:

ClassA::CallFoo()
ClassB::CallFoo()
ClassC::CallFoo()

其中 CallFoo() 是在共享文件中定义的,例如 [奇怪的假设语法]

<template this* T>::CallFoo(){T->memberX->DoStuff();}

用 C++ 可以实现类似的功能吗?我似乎找不到任何关于代码重用和多个类的信息。

编辑: 我有多个类,ClassA、ClassB、ClassC、... ClassX,它们都有一个成员变量 memberX。为了在类的成员函数中使用该成员变量,我必须对该变量进行一些设置和预处理,这对于所有类都是相等的。所以 ClassA 可以有一个方法 DoCoolStuff1() 必须调用 [shared code] 来获取更新的共享变量,ClassB 可以有一个方法 DoBoringStuff1() 也调用 [shared code]。

不幸的是,memberX 不在我的源代码中,而是在库头 ClassA : public LibClass 中,所以我不能在那里覆盖它。

【问题讨论】:

  • 您能举出更具体的例子吗?详细说明您要解决的问题,而不是理论。
  • 试图更好地解释,请参阅编辑...
  • 你是说所有这些类都是 LibClass 类的子类,而这就是数据成员所在的位置?
  • 是的,他们是,是的,数据成员属于那个类。

标签: c++ templates


【解决方案1】:

如果你说的是所有这些类都继承自包含memberX的LibClass,那么就多加一层继承:

class myLibClass : public LibClass
{
    void CallFoo() { // do stuff with memberX }
};

class classA : public myLibClass {};
class classB : public myLibClass {};
etc...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2013-07-02
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多