有没有办法,使用模板来防止类在C++中派生

Sca*_*ark 8 c++ boost

我需要阻止一个类派生,所以我想,这是Boost必须已经完成的事情.我知道他们有一个不可复制的,他们必须有一个不可复制的......

想象一下,当我找不到它时,我感到惊讶......

这让我思考..必须有一个理由.也许不可能使用模板..

我确定它是否很容易在升级库中.

我知道如何在不使用模板的情况下完成它,即使用带有私有构造函数的基类,即

class ThatCantBeDerived;  // Forward reference

class _NonDeriv
{
    _NonDeriv() {}
    friend class ThatCantBeDerived;
};

class ThatCantBeDerived : virtual public _NonDeriv
{
public:
    ThatCantBeDerived() :
      _NonDeriv()
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

或类似的东西..

也许它是导致问题的前向参考,或者可能没有可移植的方法来实现它.

无论哪种方式,我不确定为什么它不是在提升..

有任何想法吗?

Tod*_*ner 2

在当前规范下,明确禁止与模板参数“交友”,因此模板化您的示例将使其不符合标准。Boost 可能不想在它的库中添加类似的东西。我相信 Ox 中已经放宽了这一限制,并且编译器有一些解决方法。