Class 将类成员函数传递给for_

Class 将类成员函数传递给for_,class,c++11,for-loop,foreach,Class,C++11,For Loop,Foreach,我的问题是:如何将类成员函数传递给for_ 我正在尝试使用的代码:(在类外定义函数时有效) 失败的部分将被注释掉-使用for_和函数作为类成员函数的部分 关于如何让它工作有什么建议吗 #include <iostream> #include <algorithm> #include <vector> void my_function(std::string str) { std::cout << "processing settings: " &

我的问题是:如何将类成员函数传递给for_

我正在尝试使用的代码:(在类外定义函数时有效)

失败的部分将被注释掉-使用for_和函数作为类成员函数的部分

关于如何让它工作有什么建议吗

#include <iostream>
#include <algorithm>
#include <vector>

void my_function(std::string str)
{
std::cout << "processing settings: " << str << std::endl;
}

class Settings_vector{

public:
std::vector <std::string> settings;

Settings_vector(){                          // push back vector of objects
    settings.push_back("settings 1");
    settings.push_back("settings 2");
    settings.push_back("settings 3");
    settings.push_back("settings 4");
                 }

void tester(std::string settings_string){
    std::cout << "processing settings: " << settings_string << std::endl;
                                        }
};

int main()
{
//std::vector<std::string> my_vector;

Settings_vector settings_vector;

    std:: cout << "doing things the non-class way\n" << std::endl;
for_each(settings_vector.settings.begin(), settings_vector.settings.end(),     my_function); // testing function
// WORKS
/*
  std:: cout << "doing things the modern way\n" << std::endl;
for_each(settings_vector.settings.begin(), settings_vector.settings.end(),    settings_vector.tester); // testing function
// FAILS
*/

std:: cout << "doing things the oldskool way\n" << std::endl;
for (int i = 0;i<settings_vector.settings.size();++i) {
settings_vector.tester(settings_vector.settings[i]);
}
// WORKS


return 0;
}
#包括
#包括
#包括
void my_函数(std::string str)
{

std::cout最简单的方法是使用lambda表达式。更复杂的方法是使用
std::bind()
绑定所有已知参数(这里是类的实例到成员函数),并使用占位符
\u 1
\u 2
等保留未知参数

#include <iostream>
#include <algorithm>
#include <vector>

class Settings_vector
{
  Settings_vector()
    : settings { "settings 1"
               , "settings 2"
               , "settings 3"
               , "settings 4"
               }
  {}

  void tester(std::string settings_string)
  { std::cout << "processing settings: " << settings_string << std::endl; }

public:
  std::vector <std::string> settings;
};

int main()
{
  Settings_vector settings_vector;

  using namespace std;
  using namespace std::placeholders;  // for _1

  // Possibility Nr. 1: Use a Lambda Function
  for_each( settings_vector.settings.begin(), settings_vector.settings.end()
          , [&settings_vector](auto input){ settings_vector.tester(input); }
          )
  ;

  // Possibility Nr. 2: Partially bind existing arguments and use placeholders for others 
  for_each( settings_vector.settings.begin(), settings_vector.settings.end()
          , std::bind(&Settings_vector::tester, &settings_vector, _1);
          )
  ;

  return 0;
}
#包括
#包括
#包括
类设置\u向量
{
设置向量()
:设置{“设置1”
,“设置2”
,“设置3”
,“设置4”
}
{}
无效测试仪(标准::字符串设置\u字符串)

{std::我能在我的例子中再解释一下吗?如果这篇文章回答了你的问题,如果你能接受,那就太好了。