如何使参数化的基础成为 CRTP 中派生的朋友
How to make parameterized Base a friend of Derived in CRTP?
我想在参数化的 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
感谢您的帮助。
试试这个:
friend class Base<::Derived, T>;
如果这不起作用,您的编译器不支持这种形式的朋友声明(它应该,但我知道什么),您必须通过将友谊扩展到所有 Base 实例来解决此问题。
template <template <typename> class D, class BT>
friend class Base;
相关文章:
- 一位朋友将模板函数缩写为clang和gcc
- 尝试使用继承和模板实现CRTP.Visual Studio正在生成编译器错误
- CRTP 单一实例不完整类型或非文本类型
- 班级的朋友是不可接近的
- 与朋友声明相反
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么即使我声明了朋友类,我也会收到错误"无法访问类中声明的私人成员"
- 将具有固定签名的自定义函数名称注入 CRTP
- 如何在MISRA C++之后实施CRTP
- 检测使用 CRTP 的类中的成员函数
- 简化使用 CRTP 模式的类的声明
- C++ CRTP initialization
- 类似虚拟的朋友功能?
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 概念可以与 CRTP 习语一起使用吗?
- 在朋友类中使用模板
- CRTP - 危险的内存访问?
- 如何断言 CRTP 的函数为最终函数?
- 如何使参数化的基础成为 CRTP 中派生的朋友
- 命名空间内的CRTP与typdfs和朋友