我正处于一个我们想要全局定义的常量变量的项目中。
目前我们有一个像
这样的课程class Settings
{
public:
static constexpr unsigned int CONSTANT_ONE{1};
...
}
问题是这些常量中的一些我们宁愿能够在程序启动时设置 (如标题所述,用户应该能够这样做)而不是在代码中预定义
有没有漂亮的方法来做到这一点,并且仍然保持变量不变?
感谢输入,干杯!
答案 0 :(得分:3)
您可以将常量放在类private
的{{1}}部分,为它们创建静态getter并编写静态函数Settings
:
Initialize
您还可以定义宏以自动创建getter:
class Settings
{
public:
static bool Initialize();
static unsigned int CONSTANT_ONE();
...
private:
static unsigned int constantOne;
...
};
...
bool Settings::Initialize()
{
static bool isInitialized = false;
if (isInitialized)
{
// error
return false;
}
else
{
isInitialized = true;
}
constantOne = 1;
...
return true;
}
unsigned int Settings::CONSTANT_ONE()
{
return constantOne;
}
...
使用示例:
#define CONSTANT_NAME(Name) my_##Name
#define DECLARE_CONSTANT(Type, Name) \
public: \
static Type Name(); \
private: \
static Type CONSTANT_NAME(Name);
#define DEFINE_CONSTANT(Type, Name) \
Type Settings::Name() \
{ \
return CONSTANT_NAME(Name); \
} \
Type Settings::CONSTANT_NAME(Name);
答案 1 :(得分:0)
我做了类似的事情但不太确定它会满足你的需要。
我在标题的类private部分声明了以下字符串:
static const char mod_name[32];
然后我在源代码中实例化它,如下所示:
const char CLASS_NAME::mod_name[32] = "SOME STRING";
也许从这开始,看看你如何传递价值?
此外,作为私有const成员,您可以在实例构造期间实例化,这样可以为您提供传递此类常量值的方法。