我有一个结构
struct doodle
{
int x;
int y;
};
和 2 个相同的方法,除了它们使用 struct doodle
的不同属性:
void ProcessDoodlesHorizontally(std::vector<struct doodle>& v_doodles)
{
for (unsigned int i=0; i<v_doodles.size(); i++)
{
int x = v_doodles.at(i).x;
std::cout<<x<<std::endl;
}
}
void ProcessDoodlesVertically(std::vector<struct doodle>& v_doodles)
{
for (unsigned int i=0; i<v_doodles.size(); i++)
{
int y = v_doodles.at(i).y;
std::cout<<y<<std::endl;
}
}
我想创建一个函数 ProcessDoodlesGeneric
,它可以作为参数信息,说明我对 doodle.x 还是 doodle.y 感兴趣。这可能吗?如果没有,在这个例子中有哪些复用代码的替代方法?
最佳答案
由于函数之间的唯一区别是使用了哪个数据成员,因此您可以传入指向该数据成员的指针(这在此处有效,因为两个数据成员属于同一类型):
void Process(std::vector<struct doodle>& v_doodles, int doodle::* field)
{
for (auto &doodle : v_doodles)
std::cout<< doodle.*field << std::endl;
}
void ProcessDoodlesHorizontally(std::vector<struct doodle>& v_doodles)
{
Process(v_doodles, &doodle::x);
}
void ProcessDoodlesVertically(std::vector<struct doodle>& v_doodles)
{
Process(v_doodles, &doodle::y);
}
请注意,我稍微清理了 for 循环以使其更易于阅读。
这是 demo .
关于c++ - 在访问 struct 的不同属性的 C++ 函数中重用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61826715/