c++ CRTP

template<class Derived>
class Basic
{
public:
  int interfaceAdd(int a, int b)
  {
    return static_cast<Derived*>(this)->implAdd(a, b);
  }
private:
  virtual int implAdd(int a, int b) = 0;
};

class FiniteField : public Basic<FiniteField>
{
public:
  FiniteField() {}
  virtual int implAdd(int a, int b) { return a ^ b; }
};

template<class T>
int DoAdd(Basic<T>& inf, int a, int b) {
  return inf.interfaceAdd(a, b);
}

TEST(RandomGenerator, test)
{
  FiniteField ff;
  std::cout << ff.interfaceAdd(1, 2) << std::endl;
  std::cout << DoAdd(ff, 3, 4) << std::endl;
}

  

posted @ 2022-07-18 10:33  Ray.floyd  阅读(31)  评论(0编辑  收藏  举报