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)