我有结构来描述项目中各种对象的位置。 某些对象由两个或三个索引编制索引。
在这个简单的例子中,我展示了3种类型的位置A
,B
和C
,它们都是
从Position
继承,这是空的。我继承了Position
,所以我可以
在采用Position
参数的函数中传递这些位置。之所以
我不使用单个Position
结构,因为我必须将所有成员都放在一起
其中int a,b,c,d
,对于某些对象,大部分时间我都会使用a
和b
例如:
struct Position {
};
struct A : public Position {
int a,b,c,d;
};
struct B : public Position {
int a,b,c;
};
struct C : public Position {
int a,b;
};
问题是,我有这样的功能:
City &getCity(const Position &p) {
const B &pos = (const B &)p;
return rawSheets[pos.a].countries[pos.b].cities[pos.c];
}
如果我将类型B
的位置传递给此函数,那么一切都会好的,但是
如果我传递A
类型该怎么办?我需要这样做。
答案 0 :(得分:1)
看起来你真的想要一个位置类型的层次结构,每个都比前一个更具体,有点像这样:
struct Position1
{
int a;
};
struct Position2 : public Position1
{
int b;
};
struct Position3 : public Position2
{
int c;
};
struct Position4 : public Position3
{
int d;
};
这样,您可以在需要Position4
,Position1
或Position2
的任何地方使用Position3
,代码将忽略额外的维度。