Основная идея заключается в том, что у меня есть «семейство» классов, которые выполняют одну и ту же идентичную вещь, но несколько иначе. Эта «семья» используется в «высокопроизводительной» петле, поэтому скорость имеет значение. Кроме того, конкретное семейство задается конфигурационным файлом ...Есть ли более эффективный способ структурирования/шаблона C++, чем это?
Проблема в том, что здесь здесь происходит огромное повторение кода. Есть ли лучший способ структурировать это, поэтому мне не нужно писать HP<objx> test
и test.loop(bobloblaw)
три раза? (На практике этот кусок кода много больше строк, чем 2 ...)
class obj1 {
public:
double f(double x) const { return 1.; }
};
class obj2 {
public:
double f(double x) const { return x; }
};
class obj3 {
public:
double f(double x) const { return x*x; }
};
template <class O>
class HP {
private:
O obj;
public:
double loop(const vector<double>& x) {
double s = 0.;
for (auto i : x) s += obj.f(i);
return s;
}
};
int main() {
string config = "bob";
double result = 0;
vector<double> bobloblaw;
/* Read configuration file to determine which object to use. */
if (config == "obj1") {
HP<obj1> test;
result = test.loop(bobloblaw);
} else if (config == "obj2") {
HP<obj2> test;
result = test.loop(bobloblaw);
} else if (config == "obj3") {
HP<obj3> test;
result = test.loop(bobloblaw);
}
return result;
}
+1 для bobloblaw – JeremyFromEarth
+1 для арестованных Разработка ссылка. –