簡體   English   中英

如何為不同的類重用相同的實現方法

[英]How to reuse the same implementation method for diferent classes

我正在練習c ++,但我仍然堅持使用以下代碼來嘗試優化它們。 我想知道我是否可以采取一些措施來優化方法的實現。 因為除了consts之外的方法是相同的。 提前致謝。

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是相同的。 我嘗試使用“模板”進行層次結構,但由於這些結果,這對我不起作用。

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>;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM