关于C++:奇怪的重复模板?

Curiously Recurring Templates?

我有一个问题,奇怪的重复模板可以很好地帮助,但我甚至不能通过一个简单的测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template<typename T, int _size, typename OutterT>
class Foo {

};

template<typename T>
class Bar : public Foo<T, 2, Bar> {};

//typedef Bar<float> Vec2f;


int main()
{
    return 0;
}

这会导致错误

1
2
foo.cpp:7: error: type/value mismatch at argument 3 in template parameter list fortemplate<class T, int _size, class OuterT> class Foo’
foo.cpp:7: error:   expected a type, got ‘Bar’

我错过了什么。

用G++4.2.1编译


1
2
3
4
5
6
7
8
9
10
template<typename T, int _size, typename OutterT>
class Foo {

};

template<typename T>
class Bar : public Foo<T, 2, Bar<T> > {};
//                              ^^^

Bar<float> x;

由于Bar是一个模板,所以必须提供模板参数来将其实例化为一个类。