c++ - 仅当类型匹配时如何在 std::vector 上添加元素

标签 c++ vector

我有一个基类 fruit和子类 orangesapples .两个子类都重载了 operator+这样我就知道如何对橙子或苹果求和了。现在我有一个指向基类的引用 vector std::vector<std::reference_wrapper<fruit>>我想知道该 vector 中存储了多少苹果和橙子,我该如何实现?

最佳答案

#include <vector>
#include <functional>
#include <typeinfo>
#include <algorithm>

struct fruit { virtual ~fruit() = default; };

struct apple : fruit {};
struct orange : fruit {};


auto count_oranges(std::vector<std::reference_wrapper<fruit>> const& vec) -> std::size_t
{
    return std::count_if(begin(vec), end(vec), [](auto&& ref)
    {
        return typeid(ref.get()) == typeid(orange);
    });
}

关于c++ - 仅当类型匹配时如何在 std::vector 上添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46493631/

相关文章:

c++ - 有人可以告诉我这是如何编译的吗? (sqrt 返回的是一个字符串)

matlab - matlab中的L1范数等高线图

自定义矢量上的 Android 投影

c++ - 关于声明/释放 IplImages 的两种情况

c++ - Boost::Archive 导致奇怪的链接器错误

c++ - vector push_back 不起作用 c++

c++ - push_back()文件系统::path的.string()。data()的怪异行为导致生成 “vector<const char *>”

c++ - 获取时间复杂度错误

c++ - 声明嵌套命名空间 `std` 是否合法 C++?

c++ - 在 sapi5 speak 函数中存储一个保存用户输入数据的变量