我使用了不能用 g++ 4.2.1 编译的 CRTP,也许是因为派生类本身就是一个模板?有谁知道为什么这不起作用,或者更好的是,如何使它起作用?示例代码和编译器错误如下。
#include <iostream>
using namespace std;
template<typename X, typename D> struct foo;
template<typename X> struct bar : foo<X,bar<X> >
{
X evaluate() { return static_cast<X>( 5.3 ); }
};
template<typename X> struct baz : foo<X,baz<X> >
{
X evaluate() { return static_cast<X>( "elk" ); }
};
template<typename X, typename D> struct foo : D
{
X operator() () { return static_cast<D*>(this)->evaluate(); }
};
template<typename X, typename D>
void print_foo( foo<X,D> xyzzx )
{
cout << …Run Code Online (Sandbox Code Playgroud)