【发布时间】:2014-02-22 13:23:43
【问题描述】:
我的设置模块有一些冗余代码:
#include <QSettings>
class MySettings
{
public:
// param1
void setParam1(QString param1) { _settings.setValue("param1", param1); }
string param1() { return _settings.value("param1").toString(); }
// param2
void setParam2(int param2) { _settings.setValue("param2", param2); }
int param2() { _settings.value("param2").toInt(); }
// param3
void setParam3(int param3) { _settings.setValue("param3", param3); }
int param3() { _settings.value("param3").toInt(); }
private:
QSettings _settings;
}
我设法通过使用宏来减少要编写的代码量。以下是 QString 参数类型的示例:
#define INTSETTING(setter, getter) \
void set##setter(QString getter) { settings.setValue(#getter, getter);} \
QString getter() {return settings.value(#getter).toString();}
由于我使用的是 C++,我知道宏的使用很糟糕。我正在寻找更清洁的替代品。
我给出了一个 Qt 示例(QString),但这是一个更普遍的问题。
编辑:
宏使上述类的定义更加简单:
class MySettings
{
public:
STRINGSETTING(Param1, param1)
INTSETTING(Param2, param2)
INTSETTING(Param3, param3)
STRINGSETTING(DefaultTitle, defaultTitle)
INTSETTING(MaxDocCount, maxDocCount)
private:
QSettings _settings;
}
【问题讨论】:
-
有一个类似的问题:stackoverflow.com/questions/6698073/… 但我认为我的例子是一个更简单的例子。 Moreother 没有接受的答案...
-
人为什么懒惰?可以节省维护时间吗?一个小脚本将生成代码
-
我通常让我的 IDE(最好是 Eclipse CDT)做样板的东西,但我不会隐藏或掩盖它。
-
@EdHeal Little 脚本还可以生成编译器现在根据我们的模板定义生成的所有代码,那么为什么要有模板呢?
-
我认为我目前的宏实现是快速、易读和可维护的。
标签: c++ macros coding-style