gpt4 book ai didi

c++ - 如何在 C++ 中使用模板避免重复代码

转载 作者:行者123 更新时间:2023-11-30 03:03:08 27 4
gpt4 key购买 nike

我想消除这个问题中的重复代码:

class PopulationMember
{
public:
vector<int> x_;
vector<int> y_;
}

class Population
{
vector<PopulationMember*> members_;

void doComputationforX_1(); // uses the attribute x_ of all members_
void doComputationforX_2();
void doComputationforX_3();

void doComputationforY_1(); // exactly same as doComputationforX_1, but
void doComputationforY_2(); // uses the attribute y_ of all members_
void doComputationforY_3();

EDIT: // there are also functions that use all the members_ simultaniously

double standardDeviationInX(); // computes the standard deviation of all the x_'s
double standardDeviationInY(); // computes the standard deviation of all the y_'s
}

口是心非导致我有 6 个方法而不是 3 个。成对相似性是如此引人注目的是,只需将“x_”替换为“y_”,我就可以从 doComputationforX_1 中获取 doComputationforY_1 的实现。

我想过这样重做这个问题:

class PopulationMember
{
public:
vector<vector<int>> data_; // data[0] == x_ and data[1] == y_
}

但这样就不太清楚了。

我知道预编译器宏通常是一个糟糕的解决方案,但我没有看到任何其他解决方案。我的潜意识一直在提示模板,但我就是不知道如何使用它们。

最佳答案

如果你想在同一个 class PopulationMember 中分别保留 x_y_ 那么最好选择 pass by value 解决方案而不是 模板 解决方案:

将泛型方法定义为:

void doComputationfor (vector<int> (PopulationMember::*member_));
// pointer to data ^^^^^^^^^^^^^^^^^^^^^^^^^^

称它为:

doComputationfor(&PopulationMember::x_);
doComputationfor(&PopulationMember::y_);

请记住,如果您的 doComputationfor 足够大,那么强加 template 方法会导致代码重复。
使用指向成员的指针 方法,您将避免代码重复,但会带来一点运行时损失。

关于c++ - 如何在 C++ 中使用模板避免重复代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613050/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com