c++ - 在容器中查找派生对象

标签 c++ oop vector

假设我有基类 Thing从那我有Shoes , Pants , Shirt .然后我有一个 vector<Thing*> closet .

我如何找到多少 Shirt我的 closet 里有吗?

最佳答案

使用std::count_if与使用 dynamic downcast 的 lambda确定每个元素是否指向 Shirt(或其子类型——这也会捕获 TShirt 对象,其中 TShirt 是继承 Shirt 的类):

auto shirts = std::count_if(
    std::begin(closet),
    std::end(closet),
    [] (Thing const *thing) {
        return dynamic_cast<Shirt const *>(thing) != nullptr;
    }
);

关于c++ - 在容器中查找派生对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827059/

相关文章:

c++ - gSOAP RESTful 实现是否需要定义 WSDL

c++ - 使用自动工具与单元测试共享文件

c++ - 确定一个数字是否包含用于类(class)分配的数字

php - PHP 中的异常消息

c# - 派生类中属性变化的基类感知

c++ - RCPP 中的模板化矩阵

java - java中所有可能大小的所有可能排列

matlab - 基于两个向量 MATLAB 构造此矩阵

c++ - 混合 void_t 和可变参数模板?

c++ - 涉及虚函数的C++代码的输出说明