首页 > 解决方案 > 如何使用 gmock 模拟基于范围的运算符?

问题描述

我有一个继承自 std::map 的类

class LeMap : public std::map<int,int>
{
  ...
};

我有另一个类应该循环它的元素:

class LeMapUser {
  LeMap mMap;
  public:
  void printElements()
  { 
    for( auto& element : mMap ) { whatever(element); }
  }
  private:
  void whatever(int element){ ... }
};

是否可以模拟LeMap以便whatever使用 gmock 进行测试?简而言之:我应该重载哪个运算符来执行循环?

标签: c++11googlemock

解决方案


AFAIK 基于范围的for循环需要mMap对象具有begin()返回迭代器的成员。迭代器需要有一个后增量运算符才能沿着范围走。此外,mMap必须有一个end()成员,返回一个与迭代器相当的值(但不一定是迭代器本身)。


推荐阅读