我想在参数化的Base上实现CRTP,并使Base成为Derived的朋友:
template <template <typename> class Derived, class T>
class Base;
template <class T>
class Derived : public Base<Derived, T>
{
friend class Base<Derived, T>;
};
我在VS2012上遇到编译错误,并显示以下消息:
error C3200: 'Derived<T>' : invalid template argument for template parameter 'Derived', expected a class template
感谢您的帮助。
答案 0 :(得分:2)
试试这个:
friend class Base<::Derived, T>;
如果这不起作用,你的编译器不支持这种形式的朋友声明(它应该,但我知道),你必须通过扩展友谊来解决到所有Base实例化。
template <template <typename> class D, class BT>
friend class Base;