防止两个类从具有相同模板参数的基类继承

Bar*_*wek 6 c++ inheritance templates boost assert

我有一个类,假设是一个基类:

template<int ID>
class BaseClass { ... };
Run Code Online (Sandbox Code Playgroud)

如果两个类尝试使用相同的ID值继承此基类,我怎么能出现编译时错误.那就是 - 这个代码可以起作用:

class A : BaseClass<1> { ... }
class B : BaseClass<2> { ... }
Run Code Online (Sandbox Code Playgroud)

但是这段代码假设会导致错误:

class A : BaseClass<1> { ... }
class B : BaseClass<1> { ... }
Run Code Online (Sandbox Code Playgroud)

怎么能实现这个目标?BOOST_STATIC_ASSERT有帮助吗?

Naw*_*waz 1

我认为这是不可能的。

如果可能的话,我们也可以让编译器为以下代码生成错误,这在概念上与您的代码等效。

struct Base {};
struct OtherBase {};

struct A : Base {}; //Base is used here!
struct B : Base {}; // error - used base class. please use some other base!
struct C : OtherBase {}; // ok - unused based!
Run Code Online (Sandbox Code Playgroud)