C++ 常数存储c++;?
我试图在我的cpp项目中的某个地方存储几个常量。稍微看一看,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明它C++ 常数存储c++;?,c++,storage,C++,Storage,我试图在我的cpp项目中的某个地方存储几个常量。稍微看一看,这样做的方法似乎是在.h文件中定义变量并在.cpp文件中声明它 //.h class Region { public: static const int CC; }; //.cpp const int Region::CC= 12; 我了解到,要解决静态类内定义错误,可以使用constexpr 我需要存储的是区域(想想坐标/矩形),基本上是坐标系中的两个坐标。我希望能够对一个区域进行分类和使用,但也能使用其子区域 伪码示例 Co
//.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
我该如何创建一个允许这种存储/访问的结构?我想可能是名称空间,但问题是名称空间也应该存储坐标。我认为最简单的方法是只需构建一个包含所有相关信息的结构,并建立一个这样的数组来容纳你想要的“国家” 结构国家{ . . . };
你的例子有两个方面,一个是结构,一个是元素在结构中的位置。你似乎只正确地识别了第二个方面。您试图以某种恒定的方式定义这两者,尽管信息是恒定的,但这不是一个好主意:-) 一个好的解决方案是使用一个超类,例如GeopositionDelete,它有一个geoposition结构的实例变量(不是常量!!!)。超类的构造函数接受这样一个地理位置实例,并将信息存储到其本地成员中 此外,对于您需要的每一种子元素,都有子类,如region、city、house、lake等。此外,每个子类都有一个包含元素的成员。如果要限制此操作,请根据定义它,否则允许添加GeoppositionElements。请参见此处有关如何执行此操作的类似示例:
最后,您需要通过创建结构元素的实例来设置它,并且在这样做时,使用地理位置调用它们的构造函数。您可以使用与前面所示类似的方式存储地理位置,但以阵列的形式存储。更好的方法是通过文件(例如CSV或JSON)提供信息,并对其进行解析。类似于
struct S{std::string name;int x,y,w,h;std::vector subregions;}代码>?有什么问题?你问的问题似乎不太清楚。旁白:静态常量原语的值可以在头中。在我看来,静态常量变量不是你想要的。这意味着你将被困在一个国家,一个城市,一座房子里。当然,你可以有一套房子1和一套房子2,但这是一个非常糟糕的设计,当你到了1000号房子时,你会感到非常厌倦。
struct GeoPosition
{
int a,b,c,d;
}
class GeoLocatedElement
{
protected:
GeoPosition location;
public:
GeoLocatedElement(GeoLocation loc);
}
class Region:public GeoLocatedElement
{
...
}
..