2014-09-11 3 views
1

Я не знаю, прав ли мой заголовок, но я пытаюсь устранить дубликат, поэтому я думаю, что я должен поместить эти определения в массив. Может кто-нибудь подскажет мне, как я могу поместить 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(); 
} 
+0

Непонятно, что вы просите. –

ответ

1

Вы собираетесь иметь что-то подобное этому?

#define ASIZE 3 
int indx[ASIZE] = {EButtonHost, EButtonUsername, EButtonPassword}; 
string s[ASIZE] = {"host", "username", "password"}; 
string *m[ASIZE] = {&m_host, &m_username, &m_password}; 

for (int i = 0; i < ASIZE; i++) { 
    readIniFile.readString("Server", s[i].c_str(), data); 
    pButtonHost->setString(data); 
    *m[i] = pButtonHost->getString(); 
} 
+0

да видa подобный это. – Gibs

+0

@ Гибы Принять анс? –

2

А ниже кода выглядит ясно, с помощью auto и `лямбды»,

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(); 

}); 
Смежные вопросы