【发布时间】:2018-11-30 18:07:16
【问题描述】:
在不违反严格别名规则的情况下,创建从抽象模板基类派生的对象数组的最佳方法是什么?每个派生对象都会以不同的方式定义基类的模板参数,但只能通过常量枚举值。这是一个例子
enum BlaEnum
{
Bla1,
Bla2,
Bla3
};
template <class T, BlaEnum bla = Bla1>
class A
{
public:
virtual void Foo() = 0;
T att;
BlaEnum bll;
};
class B : public A<int, BlaEnum::Bla2>
{
public:
void Foo() override;
};
class C : public A<int, BlaEnum::Bla3>
{
public:
void Foo() override;
};
int main(void)
{
B b;
C c;
//violates strict-aliasing rule
A<int>* BaseArr[2] = { (A<int>*)&b,(A<int>*)&c };
}
【问题讨论】:
-
具有不同实际类型参数的实例是不同的类,彼此无关(通过继承或任何其他关系),尽管有共同的模板名称。
标签: c++ arrays inheritance strict-aliasing template-classes