C++相当于Java泛型

C++ Equivalent of Java Generics

本文关键字:泛型 Java 相当于 C++      更新时间:2023-10-16

我需要将一些java类转换为C++。例如,对于如下所示的 Java 接口:

public interface ListenerManager<L> {
    void addListener(L listener);
    void removeListener(L listener);
}

我的C++有点生疏,所以我试图找出翻译它的最佳方式。我在想这样的事情:

class IListener;
class ListenerManager
{
    virtual void add_listener(IListener listener);
    virtual void remove_listener(IListener listener);
};

然后将IListener定义为项目中其他位置的基类。

这是正确的方法吗?

编辑:

感谢您的评论!如果我使用模板,如下所示:

template<class L>
class ListenerManager
{
    virtual void add_listener(L listener);
    virtual void remove_listener(L listener);
};

。但是我有许多不同的侦听器类型,例如ListenerAListenerB,然后我是否需要在实现中为每种类型进行专用化?

你是说模板

比如

template<typename L>
class ListenerManager
{
    virtual void add_listener(L listener);
    virtual void remove_listener(L listener);
};

虽然它们不完全相同,但Java泛型可以翻译为C++模板。

template <typename T>
class ListenerManager
{
    virtual void add_listener(T listener);
    virtual void remove_listener(T listener);
};

你在C++中追求模板;经常比较,但不相同。

template <class L>
class ListenerManager
{
public:
  void add_listener(L listener);
  void remove_listener(L listener);
};

这将创建一个在侦听器管理器L上键入的类。下面的代码创建了一个类,其中每个add_listener方法都是一个模板,可以使用不同的类型。

class ListenerManager
{
  template <class L>
  void add_listener(L listener);
  // ...
};

基于问题和示例;我怀疑您可能正在寻找某种基类IListener,以多态处理某种容器中的侦听器(这样模板可能不是您遇到的问题的答案)。