如何使类不可继承
How to make a class Non-Inheritable
可能重复:
让模板参数成为朋友?
C++Faq 23.11我如何设置我的类,使它不会从继承?列出以下代码:
class Fred;
class FredBase {
private:
friend class Fred;
FredBase() { }
};
class Fred : private virtual FredBase {
public:
...
};
我试着为它制作一个通用模板。
#include <stdio.h>
template<typename MAKE_ME_NONINHERITABLE >
class NonInheritable{
private:
NonInheritable(){
}
friend MAKE_ME_NONINHERITABLE; //<--- error here
};
这给了我一个错误:
xxx.cpp:11: error: a class-key must be used when declaring a friend
所以我尝试了:
template<typename MAKE_ME_NONINHERITABLE >
class NonInheritable{
private:
NonInheritable(){
}
friend class MAKE_ME_NONINHERITABLE; //<--- error here
};
class A : virtual public NonInheritable<A>{
};
我得到了这个错误:
xxx.cpp:11: error: using typedef-name `MAKE_ME_NONINHERITABLE' after `class'
有没有办法做到这一点?
您可以使用c++11中的final
,也可以使用微软c++扩展中的sealed
。
相关文章:
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 删除C++继承中虚拟类成员的代码重复
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 为什么使用析构函数会使类不可复制?
- C++继承的虚拟类的内存布局
- 使类在使用时调用正确的构造函数
- 如何使用运算符编写可继承的模板类
- 如何使继承相同基类的类的虚拟方法弄清楚如何处理它们的参数?
- 如何使类在向量内可搜索?
- 如何使类在向量内可排序
- 仅通过指针强制转换使类类型可互换,而无需分配任何新对象
- 在 Boost::Serialise 中序列化类的非侵入式方法是否使类可序列化
- 使用>>使类可读,使用<<运算符使类可写
- 使类信息在运行时可访问的可扩展方式
- 非平凡的析构函数使类具有非平凡的可构造性
- 使类模板化会强制在继承构造函数中重复基类模板参数
- 如何使类模板参数可选
- 如何使类不可继承
- 可继承类的模板类强制转换