gpt4 book ai didi

c++ - 常量存储 C++?

转载 作者:行者123 更新时间:2023-11-28 04:50:48 28 4
gpt4 key购买 nike

我试图在我的 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com