提问人:ritter 提问时间:11/11/2023 最后编辑:Evgritter 更新时间:11/11/2023 访问量:66
CRTP 的部分模板专用化问题
Problem with partial template specialization with CRTP
问:
我无法弄清楚如何部分专用化使用奇怪的重复模板模式 (CRTP) 的基类。此 CRTP 的特点是派生类本身是一个类模板。这是我尝试的:
#include "iostream"
using namespace std;
template<class T> class Word;
template<class T, template<class> class C>
class BaseView
{
public:
BaseView() { cout << "normal BaseView" << endl; }
};
#if 0
template<class T, template<class> class C >
class BaseView<Word<T> , C<Word<T> > >
{
public:
BaseView() { cout << "BaseView specialized on Word" << endl; }
};
#endif
template<class T> class A: public BaseView<T,A>
{
public:
A():BaseView<T,A>() {}
};
int main()
{
A<A<Word<int> > > a0;
A<Word<int> > a1;
}
我希望第二个对象 (a1) 的构造使用(部分)专用基类(在上面的代码中是 ifdef'd 的基类)。
GCC++ v12 告诉我,对于模板参数列表中的第二个参数,它需要一个类模板,得到“C<Word >。这是有道理的,但我不知道如何更改代码以使其工作。
答: 暂无答案
评论
#if 0
#if 1
template<class T, template<class> class C> class BaseView<Word<T>, C>