我试图在我的cpp项目中的某个地方存储几个常量。看一下,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明它。
//.h
class Region {
public:
static const int CC;
};
//.cpp
const int Region::CC= 12;
我已经了解到要解决静态类内定义错误,您可以使用constexpr
。
我需要存储的是区域(思考坐标/矩形),基本上是坐标系中的2个坐标。我希望能够对一个地区进行分类和使用,但也可以使用其子区域。
伪代码示例;
Country(100, 100, 900, 900){
City(150, 150, 200, 200) {
House1(155, 155, 160, 160)
House2(170, 170, 180, 180)
}
Lake(300, 300, 400, 400)
}
哪些地区可以堆叠"无限期" (比如说max 10嵌套)。我可以在哪里访问其区域;
Country //returns 100,100,900,900
Country.City //returns 150,150,200,200
Country.City.House1 //returns 155,155,160,160
Country.Lake //returns 300,300,400,400
我如何创建一个允许这种存储/访问的结构?我想的可能是命名空间,但问题是只有命名空间也应该存储坐标。
答案 0 :(得分:1)
您的示例有两个方面,一个是结构,一个是结构中元素的位置。您似乎只是恰当地确定了第二个方面。你尝试以某种方式定义两者,虽然信息是不变的,但不是一个好主意: - )
struct GeoPosition
{
int a,b,c,d;
}
class GeoLocatedElement
{
protected:
GeoPosition location;
public:
GeoLocatedElement(GeoLocation loc);
}
class Region:public GeoLocatedElement
{
...
}
..
一个好的解决方案是拥有一个超类,例如GeoPositionedElement,它有一个335的实例变量(NOT constant !!!)。超类的构造函数接受这样的地理定位实例,并将信息存储到其本地成员中。
此外,您还需要各种子元素的子类,例如region,city,house,lake等。此外,每个子类都包含一个包含元素的成员。如果要限制它,则根据其他方式定义,否则允许添加GeoPositionedElements。请参阅此处有关如何执行此操作的类似示例:using Composite Pattern to count the number of people in the world。
最后,您需要通过创建结构元素的实例来设置它,并在执行此操作时,使用地理位置调用其构造函数。您可以以您显示的方式存储地理位置,但是在数组中。更好的方法是通过文件(例如CSV或JSON)提供信息,然后解析它。
答案 1 :(得分:0)
我认为最简单的方法就是简单地构建一个包含您需要的所有相关信息的结构,并构建一个这种类型的数组来保存多少个国家"你想要的。
struct Country { 。 。 。 };
然后将所需的所有子类别放入其中。