我试图在我的 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)
}
区域可以“无限期”堆叠的位置(可以说最多嵌套 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
我如何创建允许这种存储/访问的结构?我在想可能是命名空间,但问题出现了,命名空间也应该存储坐标。
最佳答案
你的例子有两个方面,一个是结构,一个是元素在结构中的位置。看来您只正确识别了第二个方面。您尝试以某种恒定的方式定义两者,这不是一个好主意,尽管信息是恒定的:-)
struct GeoPosition
{
int a,b,c,d;
}
class GeoLocatedElement
{
protected:
GeoPosition location;
public:
GeoLocatedElement(GeoLocation loc);
}
class Region:public GeoLocatedElement
{
...
}
..
一个好的解决方案是拥有一个父类(super class),例如 GeoPositionedElement,它有一个地理定位结构的实例变量(不是常量!!!)。您的父类(super class)的构造函数接受这样的地理位置实例并将信息存储到其本地成员中。
此外,您还可以为所需的每种子元素创建子类,例如地区、城市、房屋、湖泊等。此外,每个子类都有一个包含元素的成员。如果你想限制它,那么相应地定义它,否则允许添加 GeoPositionedElements。请在此处查看有关如何执行此操作的类似示例:using Composite Pattern to count the number of people in the world .
最后,您需要通过创建结构元素的实例来设置它,并且在这样做时,使用地理位置调用它们的构造函数。您可以以与所示类似的方式存储地理位置,但以数组形式存储。更好的方法是通过文件(例如 CSV 或 JSON)提供信息并解析它。
关于c++ - 常量存储 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263598/