我试图在cpp项目中的某个地方存储几个常量。环顾四周,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明变量。
//.h
class Region {
public:
static const int CC;
};
//.cpp
const int Region::CC= 12;我了解到要解决静态类内定义错误,可以使用constexpr.
我需要存储的是区域(考虑坐标/矩形),基本上是坐标系统中的两个坐标。我希望能够对一个区域进行分类和使用,但也能利用其分区域。
伪码实例;
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)
}其中区域可以“无限期地”堆叠(比如最多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,我如何创建一个允许这种存储/访问的结构?,我想也许是名称空间,但问题是,仅仅命名空间也应该存储坐标。
发布于 2018-01-15 13:25:27
您的示例有两个方面,一个是结构,另一个是元素在结构中的位置。似乎你只正确地识别了第二个方面。你试图用一种常量的方式来定义这两者,这不是一个好主意,尽管信息是恒定的:-)
struct GeoPosition
{
int a,b,c,d;
}
class GeoLocatedElement
{
protected:
GeoPosition location;
public:
GeoLocatedElement(GeoLocation loc);
}
class Region:public GeoLocatedElement
{
...
}
..一个好的解决方案是有一个超类,例如GeoPositionedElement,它有一个地理位置结构的实例变量(不是常数!)。超类的构造器接受这样的地理位置实例,并将信息存储到其本地成员中。
此外,您需要的每种子元素都有子类,如区域、城市、房屋、湖泊等。此外,每个子类都有一个包含元素的成员。如果您想要限制这一点,那么按照它定义,否则允许添加GeoPositionedElements。这里有一个类似的例子,说明如何做到这一点:using Composite Pattern to count the number of people in the world。
最后,您需要通过创建结构元素的实例来设置它,当这样做时,使用地理位置调用它们的构造函数。您可以使用类似的方式存储地理位置,但存储在数组中。更好的方法是通过文件(例如CSV或JSON )提供信息,并对其进行解析。
发布于 2018-01-15 13:14:57
我认为最简单的方法是简单地构建一个包含你所需要的所有相关信息的结构,并构建一个数组来保存你想要的多少个“国家”。
结构国家{。。};
把你想要的所有子类别都放进去。
https://stackoverflow.com/questions/48263598
复制相似问题