C++相当于Java泛型
C++ Equivalent of Java Generics
我需要将一些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);
};
。但是我有许多不同的侦听器类型,例如ListenerA
和ListenerB
,然后我是否需要在实现中为每种类型进行专用化?
你是说模板?
比如
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
,以多态处理某种容器中的侦听器(这样模板可能不是您遇到的问题的答案)。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 链表的泛型函数remove()与成员函数remove)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 模板化接口 - 创建一个泛型模板类以返回任何容器
- 如何编写将要继承的泛型代码?
- C++17 如何保存泛型可调用对象以供以后使用
- Java 是否像C++模板一样具有泛型推论?
- 将Java转换为C++:模板与泛型
- C++相当于Java泛型
- 如何在 Java 中模拟'question mark(?)'类型泛型以C++?
- 使用通配符编译 Java 泛型以C++模板
- Scala:Java、C#、Scala 和 C++ 中的高级、开放类型和通配符泛型
- Java泛型类型比较
- C++中的模板、Java 中的泛型和 >> 位移运算符
- 在java中传递泛型类类型
- c++模板和Java/ c#泛型之间的区别是什么?限制是什么?
- 模板和泛型.为什么我可以在c++中做以下的事情,而不能在Java中做?我该如何克服呢?
- Java模板泛型类型
- 使用JAVA JNI和c++进行泛型调用