相关疑难解决方法(0)

如何编写具有超过2层继承的奇怪重复模板?

我在Curiously Recurring Template Pattern上阅读的所有材料似乎都是一层继承,即BaseDerived : Base<Derived>.如果我想更进一步怎么办?

#include <iostream>
using std::cout;


template<typename LowestDerivedClass> class A {
public:
    LowestDerivedClass& get() { return *static_cast<LowestDerivedClass*>(this); }
    void print() { cout << "A\n"; }
};
template<typename LowestDerivedClass> class B : public A<LowestDerivedClass> {
    public: void print() { cout << "B\n"; }
};
class C : public B<C> {
    public: void print() { cout << "C\n"; }
};

int main()
{
    C c;
    c.get().print();

//  B b;             // Intentionally bad syntax, 
// …
Run Code Online (Sandbox Code Playgroud)

c++ templates crtp

21
推荐指数
2
解决办法
2114
查看次数

使用CRTP时如何避免错误?

使用CRTP有时我会编写如下代码:

// this was written first
struct Foo : Base<Foo, ...>
{
   ...
};

// this was copy-pasted from Foo some days later
struct Bar : Base<Foo, ...>
{
   ...
};
Run Code Online (Sandbox Code Playgroud)

并且很难理解出现了什么问题,直到我在调试器中跟踪代码并看到Bar的成员未被使用Base.

如何在编译时显示此错误?

(我使用MSVC2010,所以我可以使用一些C++ 0x功能和MSVC语言扩展)

c++ crtp

15
推荐指数
2
解决办法
1425
查看次数

标签 统计

c++ ×2

crtp ×2

templates ×1