C++ 返回泛型类型集合的正确方法

标签 c++ algorithm templates generics containers

我是 C++ 的新手,不幸的是我无法停止使用 C#(我以前的语言)进行思考。 我阅读了一些书籍、论坛和 C++ 引用网站,但找不到我的问题的答案,所以我想我不妨在这里尝试一下,然后再放弃并写一些丑陋的东西。

好了,我们可以开始了。 我有一个带有抽象方法 succesorsFunction 的类,我希望它返回指向 State 的指针集合。我不想强制实现者使用特定的容器;我宁愿让他们选择( vector 、列表等)。

所以看起来像这样:

class Problem
{
public:
    virtual list<const State*>::iterator succesorsFunction(const State &state, list<const State*>::iterator result) const = 0;
};

这里的问题是列表的显式使用。你是如何用 C++ 实现的?

想过用模板,后来遇到了两个问题: 1)似乎你不能用抽象方法来做(或者我错了吗?) 2) 如何告诉模板它应该包含指向 State 的指针?

最佳答案

您不能在 C++ 中根据返回类型重载方法。

此外,C++ 中的“容器”没有相同的基数(如 Java 中的 Collection),因此您无法返回通用容器。

恐怕没有干净的方法可以做到这一点。

我只会编写重载(通过参数)或不同的函数名称。

对于您的问题:

1) 你可以。是什么让您认为自己做不到?

2) 与声明 list 的方式相同: list<const State*> - const是可选的。

关于C++ 返回泛型类型集合的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440298/

相关文章:

c++ - 为任何返回 vector 的函数重载 ostream

c++ - std::array 的读取范围

c++ - 如何使用 QProcess 通过 Ping 检测 "Network is Unreachable"?

c++ - 使用opencv从图像中提取不同大小的矩形

c++ - 给定 3 个正整数,找到将它们减少到 0 的最大步数

python - str.join(iterable)方法如何在Python/线性时间字符串连接中实现

algorithm - Prolog 有条件的排列?

c++ - QLineEdit:是否有一种优雅的解决方案可以在事件处理程序中区分多个 QLineEdit 小部件?

c# - 如何对多个不同大小的矩形进行分类

回调中生产者和消费者之间的 C++ 循环模板依赖