【发布时间】:2011-03-14 12:18:12
【问题描述】:
我有一个假设是基类的类:
template<int ID>
class BaseClass { ... };
如果两个类尝试使用相同的 ID 值从这个基类继承,我怎么能出现编译时错误。也就是说 - 这段代码应该可以工作:
class A : BaseClass<1> { ... }
class B : BaseClass<2> { ... }
但是这段代码应该会导致错误:
class A : BaseClass<1> { ... }
class B : BaseClass<1> { ... }
如何实现这一目标? BOOST_STATIC_ASSERT 有帮助吗?
【问题讨论】:
-
你的意思是
BaseClass而不是第二个和第三个sn-p中的ID,我猜? -
@Bartłomiej:我想你想写
class A : BaseClass<1> { ... }而不是class A : ID<1> { ... }。 -
你是对的 - 它应该是
BaseClass。我的错。 -
只是一个问题,我们什么时候可以从中受益?我的意思是你为什么要这样做?
-
我认为甚至可以证明这是不可能的。首先,即使使用非模板类,您也无法做到这一点。这就是为什么。如果可以一次完成,您可以复制所有相同的文件,只需更改派生类的名称,您将得到两个实现。请记住,C/C++ 中的模块化是通过直接基于文本的包含来实现的。
标签: c++ templates inheritance boost assert