c++ - 如何在 C++ 中强制使用奇怪的重复模板模式

标签 c++ templates inheritance crtp

我有以下基本模板类。

template<typename T>
class Base {
  public:
    void do_something() {
    }
};

它旨在用作奇怪地重复出现的模板模式。它应该像class B : public Base<B>一样被继承.它必须class B : public Base<SomeoneElse>一样被继承.我想静态地执行这个要求。如果有人使用错误,我预计会在编译阶段出现错误。

我正在做的是放置一个 static_cast<T const&>(*this)do_something() .这样,继承模板的类就是或继承自作为模板参数提供的类。对不起,令人困惑的表达。用简单的英语来说,它需要 B是或继承自 SomeoneElseclass B : public Base<SomeoneElse> .

我不知道这是否是实现此目标的最佳方式。我觉得很恶心。

但是我想做更多。我想确保 BSomeoneElse本身。我该怎么做?

最佳答案

构造Base的构造函数(或析构函数)私有(private)的,然后制作T一个friend .这样唯一可以构造/破坏 Base<T> 的东西是 T .

关于c++ - 如何在 C++ 中强制使用奇怪的重复模板模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30232004/

相关文章:

c++ - 数组值不断将计算值添加到数组的先前值

c++ - 其他成员函数的通用 'member function' 包装器?

c++ - 无法推断模板参数( vector 、std::function)

python - 在 Django 中,是否可以为某个父类(super class)定义外键,但在查询时返回了子类?

java - 继承不同的变量和方法的行为

c++ - VS 10 中英特尔 C++ 编译器的矢量化报告目录

C++ TinyThread 和带有 FreeGLUT 的 OpenGL

c++ - 我怎样才能让我的模板类推断出函数指针模板参数的返回值和参数类型

java - 如何使用 Java 泛型来避免覆盖继承的方法(类似模板的行为)?

C++,Typedef 静态 getInstance 函数