c++ - 如何使类不可继承

标签 c++ templates

<分区>

Possible Duplicate:
Making a template parameter a friend?

C++ 常见问题解答 23.11 How can I set up my class so it won't be inherited from? 列出以下代码:

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 或来自 Microsoft extensions for c++ 的 sealed

关于c++ - 如何使类不可继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512690/

相关文章:

C++ 元编程 doxygen 文档

c++ - 从类模板继承的类的 vector

c++ - 将类转换为模板

c++ - 具有派生类的模板化数据类型

c++ - 一个函数可以接收来自两个不同函数的两个参数吗?

c++ - 推导 lambda 函数中的模板参数及其结果

c++ - 在 Openmesh 中将网格拆分为连接的组件

编译时参数未知的 C++ 函数调用

c++ - 在函数结束后使用指向变量的指针是否安全?

c++ - 如何获取 Allegro 中的错误原因?