如何为不同的类重用相同的实现方法
How to reuse the same implementation method for diferent classes
我正在练习 c++,但在尝试优化它们时卡在了以下代码中。我想知道我是否可以做些什么来优化他们方法的实现。因为除了常量之外,方法是相同的。提前致谢。
dominios.h
class HP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 1000;
public:
void setValor(int);
int getValor() {
return valor;
}
};
class MP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 500;
public:
void setValor(int);
int getValor() {
return valor;
}
};
dominios.cpp
void HP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
void MP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
如您所见,两者 类 的 setValor 相同。我尝试使用 "template" 进行层次结构,但由于常量,这对我不起作用。
this->valor = std::clamp(valor, LIMITE_INFERIOR, LIMITE_SUPERIOR);
template <typename Tag, int lo, int hi>
class Metric {
private:
int valor;
public:
void setValor(int v) { valor = std::clamp(v, lo, hi); }
int getValor() { return valor; }
};
struct HPTag;
using HP = Metric<HPTag, 0, 1000>;
struct MPTag;
using MP = Metric<MPTag, 0, 500>;
我正在练习 c++,但在尝试优化它们时卡在了以下代码中。我想知道我是否可以做些什么来优化他们方法的实现。因为除了常量之外,方法是相同的。提前致谢。
dominios.h
class HP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 1000;
public:
void setValor(int);
int getValor() {
return valor;
}
};
class MP {
private:
int valor;
static const int LIMITE_INFERIOR = 0;
static const int LIMITE_SUPERIOR = 500;
public:
void setValor(int);
int getValor() {
return valor;
}
};
dominios.cpp
void HP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
void MP::setValor(int valor) {
if (valor < LIMITE_INFERIOR) this->valor = LIMITE_INFERIOR;
else if (valor > LIMITE_SUPERIOR) this->valor = LIMITE_SUPERIOR;
else this->valor = valor;
}
如您所见,两者 类 的 setValor 相同。我尝试使用 "template" 进行层次结构,但由于常量,这对我不起作用。
this->valor = std::clamp(valor, LIMITE_INFERIOR, LIMITE_SUPERIOR);
template <typename Tag, int lo, int hi>
class Metric {
private:
int valor;
public:
void setValor(int v) { valor = std::clamp(v, lo, hi); }
int getValor() { return valor; }
};
struct HPTag;
using HP = Metric<HPTag, 0, 1000>;
struct MPTag;
using MP = Metric<MPTag, 0, 500>;