如何使类不可继承

How to make a class Non-Inheritable

本文关键字:可继承 何使类      更新时间:2023-10-16

可能重复:
让模板参数成为朋友?

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