【问题标题】:Constant storing c++?常量存储 C++?
【发布时间】:2018-01-15 13:03:57
【问题描述】:

我试图在我的 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 S {std::string name; int x, y, w, h; std::vector<S> subregions;};?
  • 有什么问题?你在问什么似乎不是特别清楚。
  • aside:静态 const 原语可以在标题中包含它们的值。
  • 在我看来,静态 const 变量不是您想要的。这意味着您将被困在一个国家,一个城市,一所房子。当然,您可以拥有 House1 和 House2,但这是非常糟糕的设计,因为当您到达 House1000 时,您会非常厌倦。

标签: c++ storage


【解决方案1】:

你的例子有两个方面,一个是结构,一个是结构中元素的位置。看来您只正确识别了第二个方面。您尝试以某种恒定的方式定义两者,这不是一个好主意,尽管信息是恒定的:-)

    struct GeoPosition
    {
       int  a,b,c,d;
    }

class GeoLocatedElement
{
protected:
   GeoPosition location;
public:
   GeoLocatedElement(GeoLocation loc);
}

class Region:public GeoLocatedElement
{
...
}

..

一个好的解决方案是拥有一个超类,例如 GeoPositionedElement,它有一个 geoposition 结构的实例变量(不是常量!!!)。您的超类的构造函数接受这样的地理定位实例并将信息存储到其本地成员中。

此外,您还可以为所需的每种子元素设置子类,例如区域、城市、房屋、湖泊等。此外,每个子类都有一个包含元素的成员。如果您想限制这一点,请相应地定义它,否则允许添加 GeoPositionedElements。请参阅此处有关如何执行此操作的类似示例:using Composite Pattern to count the number of people in the world

最后,您需要通过创建结构元素的实例来设置它,并且在这样做时,使用地理位置调用它们的构造函数。您可以以与所示类似的方式存储地理位置,但以数组的形式。更好的方法是通过文件(例如 CSV 或 JSON)提供信息并对其进行解析。

【讨论】:

    【解决方案2】:

    我认为最简单的方法是简单地构建一个包含您需要的所有相关信息的结构,然后构建一个该类型的数组来保存您想要多少个“国家”。

    结构国家{ . . . };

    只需将您想要的所有子类别放入其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2015-04-25
      • 2010-12-07
      • 1970-01-01
      相关资源
      最近更新 更多