c++ - 为静态类型转换索引数组制作数组

标签 c++ arrays static-cast

我不知道我的标题是否正确,但我试图消除重复项,所以我认为我应该将这些定义放在一个数组中。有人可以建议我如何将 pButtons 放入数组中吗?我在想 pButton[EButtonHost]、pButton[EButtonUsername] 等东西。

#define pButtonHost static_cast<XQtMultipleStringInputButton*>(m_pButtonList[EButtonHost])
#define pButtonUsername static_cast<XQtMultipleStringInputButton*>(m_pButtonList[EButtonUsername])
#define pButtonPassword static_cast<XQtMultipleStringInputButton*>(m_pButtonList[EButtonPassword])

下面我有一个这样的方法。

XIniFile readIniFile;
readIniFile.open(k_systemIniFile, EIniReadOnly);

string data;

readIniFile.readString("Server", "host", data);
pButtonHost->setString(data);
m_host = pButtonHost->getString();

readIniFile.readString("Server", "username", data);
pButtonUsername->setString(data);
m_username = pButtonUsername->getString();

readIniFile.readString("Server", "password", data);
pButtonPassword->setString(data);
m_password = pButtonPassword->getString();

它们看起来像重复项,所以我正在尝试对其进行优化。谢谢!

更新: 我现在有这样的东西。这是对的吗?或者您有什么更好的建议吗?

for (int i = 0; i < 3; ++i) {
    readIniFile.readString("Server", k_dataList[i], data);
    static_cast<XQtMultipleStringInputButton*>(m_pButtonList[i])->setString(data);
    m_pData[i] = static_cast<XQtMultipleStringInputButton*>(m_pButtonList[i])->getString();
}

最佳答案

通过使用 auto 和 `lambda',下面的代码看起来很清晰,

auto GetConfigInfo = [&](string section_name, ButtonType btn_type)-> string
{
    readIniFile.readString("Server", section_name, data);
    m_pButtonList[btn_type_]->setString(data);
    return m_pButtonList->getString();
};

m_host      = GetConfigInfo("host",     EButtonHost);
m_username  = GetConfigInfo("username", EButtonUserName);
m_password  = GetConfigInfo("password", EButtonPassword);

使用结构定义数据类型可以是其他方法。

struct ConfigDefine
{
    string  section_;
    ButtonType btn_type_; //your enum button type, such as EButtonHost, EButtonUserName
    string& result_;

}configs[]  = 
{
    {"host",     EButtonHost,     m_host},
    {"username", EButtonUserName, m_username},
    {"password", EButtonPassword, m_password}
};

for_each(std::begin(configs), std::end(configs), [&](ConfigDefine& config)
{
    readIniFile.readString("Server", config.section_, data);
    m_pButtonList[config.btn_type_]->setString(data);
    config.result_ = pButtonHost->getString();

});

关于c++ - 为静态类型转换索引数组制作数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25780092/

相关文章:

java - 访问 Object[] 数组成员的方法

javascript - 将链接列表从数组保存到文本文件(几乎可以正常工作)

c++ - static_cast 文字 0 到 STL 中的其他类型

c++ - 简单命令行程序中的段错误

c++ - 为什么大型本地数组会使我的程序崩溃,而全局数组却不会?

c++ - Simulink Coder - 如何将外部代码与模型连接起来

c++ - 地形跟随算法中的负行和负列

c++ - 数组索引与数组元素

C++ 和转换运算符

c++ - c++中static_cast是如何实现的?