如何自动生成C++函数?

map*_*ple 4 c++ generics templates code-generation

我想编写一个c ++矩阵操作代码,某些函数的某些操作是相同的.我想知道是否有一些方法可以合并它们?例如:

void add1(vector<vector<double> > &m){
    for(int i = 0; i < m.size(); ++i){
        for(int j = 0; j < m[i].size(); ++j){
            m[i][j] += 1.0;
        }
    }
}

void minus1(vector<vector<double> > &m){
    for(int i = 0; i < m.size(); ++i){
        for(int j = 0; j < m[i].size(); ++j){
            m[i][j] -= 1.0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两段代码几乎相同.如何避免重写两次?是否有类似模板的东西可以自动生成代码?

R S*_*ahu 10

您可以定义一个函数模板,并将迭代的核心逻辑放在该函数中的元素上.

template参数可以是functor,可用于定义每个特定调用的内容.

// Change m to be a reference so the modifications to the elements
// are visible in the calling function.

template <typename Functor>
void for_each_member(vector<vector<double> >& m, Functor functor)
{
   for(std::size_t i = 0; i < m.size(); ++i){
      for(std::size_t j = 0; j < m[i].size(); ++j){
         functor(m[i][j]);
      }
   }
}

void add1(vector<vector<double> >& m){
   for_each_member(m, [](double& item) { item += 1.0;});
}

void minus1(vector<vector<double> >& m){
   for_each_member(m, [](double& item) { item -= 1.0;});
}
Run Code Online (Sandbox Code Playgroud)