【问题标题】:C++ macro integers and object definitionsC++ 宏整数和对象定义
【发布时间】:2013-11-17 21:33:17
【问题描述】:

我缺乏使用 C++ 的经验,我正在尝试创建一个设置文件来将我的所有定义和全局变量放在那里,以便我的项目的类可以从那里访问这些值。 Settings.h 文件可能如下所示:

#ifndef SETTINGS_H_
#define SETTINGS_H_

#define COLOR_BLUE = Vec3b(255, 0, 0);
#define COLOR_GREEN = Vec3b(0, 255, 0);
#define NOT_SET = 0;
#define IN_PROCESS = 1;
#define SET = 2;
#define FGD_PX = 255;
#define BGD_PX = 127;

#include <cv.h>
using namespace cv;

class Settings {
};
#endif /* SETTINGS_H_ */

这个想法是访问变量而不实例化类,而只是包含它。

有什么漂亮的方法可以做到这一点吗?

干杯,

【问题讨论】:

  • 省略=...
  • 不要将using namespace ... 指令放在头文件中。绝不。在任何情况下。
  • #define 具有全局范围并且不是类型安全的。最好使用static const
  • 为什么我不能在头文件中使用命名空间Oswald

标签: c++ macros header definition


【解决方案1】:
#include <cv.h>
using namespace cv;

#ifndef SETTINGS_H_
#define SETTINGS_H_

#define COLOR_BLUE Vec3b(255, 0, 0)
#define COLOR_GREEN Vec3b(0, 255, 0)
#define NOT_SET 0
#define IN_PROCESS 1
#define SET 2
#define FGD_PX 255
#define BGD_PX 127

class Settings {
public:
   static int var1;
   static float var2;
   static short var3;
};

// initialization
int Settings::var1 = SET;
float Settings::var2 = 3.14;
short Settings::var3 = BGD_PX;

#endif /* SETTINGS_H_ */

用法:

int tmp = Settings::var1;

【讨论】:

  • 当然你不希望标题中的那些静态定义。
  • 从 c++11 开始,您可以直接在声明中初始化它们。
  • using namespace 声明应该从不在头文件中。
【解决方案2】:

常量要么放在枚举中,要么作为静态常量。清单常量通常为编译器类型选项保留:

#ifndef SETTINGS_H_
#define SETTINGS_H_

class Settings {
public:
   static const vec3b color_blue;
   static const vec3b color_green;
   enum statics {
         NOT_SET = 0,
         IN_PROCESS = 1,
         SET = 2,
         FGD_PX = 255,
         BGD_PX = 127
   };

};

vec3b Settings::color_blue(255, 0, 0);
vec3b Settings::color_green(0, 255, 0);

#include <cv.h>

#endif

【讨论】:

  • 再一次:从 c++11 开始,您可以在声明中初始化成员变量。
  • @user2176127 我很高兴能删除所有清单常量,我不想担心可移植性
【解决方案3】:

您不应该在#defines 中使用等号或分号。你打算在你的设置类中加入什么?

【讨论】:

  • 要发表评论,请在问题下方使用add comment。此区域仅用于解答。请删除此帖。
  • @Desolator 你需要一定的声望才能发布 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-26
  • 2011-08-18
相关资源
最近更新 更多