在不创建 Functor class 的情况下使用 Functors 时出错?

Getting error while using Functors without creating a Functor class?

我想在不创建仿函数的情况下使用仿函数 class 但是我的 foundVector 显示为空,即使我在 foundVector 中存储了匹配的字符串。

也告诉我有没有更好的使用fucntors的方法

我正在使用 Visual Studio 2013。这是我的演示代码:

输入:

#include<iostream>
#include<vector>
#include <string>

class Demo
{
   public:
      Demo(const std::string& string) :string_(string){};
      void findFunctor(const std::string& string);
      void operator()(const std::string &string);
      void input();
   private:
      const std::string string_;
      std::vector<std::string> storeVector;
      std::vector<std::string> foundvector;
};

void Demo::input()
{
   storeVector.push_back("test");
   storeVector.push_back("hello");
   storeVector.push_back("world");
   storeVector.push_back("foo");
   storeVector.push_back("hello");
}

void Demo::findFunctor(const std::string& string)
{
   Demo object(string);
   for (auto &elem : storeVector)
   {
      object(elem);
   }
   for (auto elem : foundvector)
   {
      std::cout << elem<<"\n";//Surprisingly Vector is empty and i want to know why??
   }

}

void Demo::operator()(const std::string &string)
{
   if (string == string_)
   {
      foundvector.push_back(string_);//Vector consists of two strings if  matching string is found
   }
}

int main()
{
   Demo dObject("hello");
   dObject.input();
   dObject.findFunctor("hello");
   return 0;
}

您正在修改 foundVector 创建的对象:

 Demo object(string);

当你打电话时

 object(elem);

换行

for (auto elem : foundvector)

for (auto elem : object.foundvector)

获得正确答案。