c++在头文件中定义一组const struct

c++ define a group of const struct in head file

我正在使用定义结构的 C++ 库。

例如。

struct demo{
    string x;
    string y;
    string z;
    int n;
};

通常我这样使用这个结构

demo s;
s.x = "AAA";
s.y = "BBB";

如果我需要经常使用结构的某些值。在新的头文件中定义一组 const struct 是有意义的。定义头文件和实现文件的正确方法是什么(是否需要)?此外,是否有任何方便的方法通过#define 预处理器指令来执行此操作?

const struct AAABBB;
const struct AAACCC;
...
const struct BBBCCC;

其中x=AAA,y=BBB。

#define mydemo(x, y) const struct demo x##y = { #x, #y }

问题:

What the right way to define the head file and implementation file(is it needed)?

您可以创建一个包含以下内容的头文件:

ConstStructs.h:

// I assume you meant to use demo and not struct.
extern const demo AAABBB;
extern const demo AAACCC;
...
extern const demo BBBCCC;

您可以创建一个包含以下内容的实施文件:

ConstStructs.cpp:

const demo AAABBB = {"AAA", "BBB", "...", N1}; // Use suitable values for z and n
const demo AAACCC = {"AAA", "CCC", "...", N2};
...
const demo BBBCCC = {"BBB", "CCC", "...", N3};

我不担心使用宏来生成这些对象。考虑到您的对象会有点模糊,不值得付出努力。

另一种选择

我对使用全局数据有偏见,const 或其他。我更愿意通过功能接口提供对此类数据的访问。

ConstStructs.h:

extern const demo& getAAABBB();
extern const demo& getAAACCC();
...
extern const demo& getBBBCCC();

ConstStructs.cpp:

const demo& getAAABBB()
{
   static const demo obj = {"AAA", "BBB", "...", N1};
   return obj;
}

const demo& getAAACCC()
{
   static const demo obj = {"AAA", "CCC", "...", N2};
   return obj;
}
...
const demo& getBBBCCC()
{
   static const demo obj = {"BBB", "CCC", "...", N3};
   return obj;
}