Здравствуйте
Есть VC++ 6.0
class CCfgSection
{
vector<CCfgKey> m_Keys;
string m_Name;
string m_Comment;
public:
...
BOOL SetValue (const string &Name, const string &Value, const string &Comment = string());
};
class CCfgData
{
...
BOOL SetValue(const string &Key, const string &Value, const string &Comment = string(), const string &Section = string());
const CCfgSection *GetSection(const string &Name...) const;
protected:
vector <CCfgSection> m_Sections;
};
Логика подсказывает, что CCfgData::GetSection должна быть const, но
далее внутри CCfgData::SetValue делаю:
CCfgSection *pSection = const_cast<CCfgSection *>(GetSection(...))
для того, чтобы вызвать: pSection->SetValue(Key, Value, Comment)
Вопрос состоит в том, что оправдано-ли использование const_cast, я начинающий "С++ писатель" и начитался в книжках, что применение
*_cast следствие неправильного дизайна.
Заранее благодарю
С уважением, Михаил
Добавлено форматирование, удалены лишние пробельные строки — Кодт
Здравствуйте, M.Sandakov, Вы писали:
MS>Здравствуйте
MS>Есть VC++ 6.0
Обычно делают так:
const CCfgSection *GetSection(const string &Name...) const;
CCfgSection *GetSection(const string &Name...);
Здравствуйте, M.Sandakov, Вы писали:
MS>Вопрос состоит в том, что оправдано-ли использование const_cast, я начинающий "С++ писатель" и начитался в книжках, что применение
MS>*_cast следствие неправильного дизайна.
Casts использовать можно. Основной — static_cast. dynamic_cast применять по назначению. const_cast, reinterpret_cast — вот это действительно хаки, их следует избегать, кроме крайней необходимости, или где-то глубоко внутри (скажем, boost::addressof использует reinterpret_cast, но пользователю знать об этом необязательно.
MS>начинающий «С++-писатель»
MS>class CCfgSection
class CCfgData
Нашел как начинать! Прочитай:
http://www.jelovic.com/articles/stupid_naming.htm
Здравствуйте, Roman Odaisky, Вы писали:
RO>Casts использовать можно. Основной — static_cast. dynamic_cast применять по назначению. const_cast, reinterpret_cast — вот это действительно хаки, их следует избегать, кроме крайней необходимости, или где-то глубоко внутри (скажем, boost::addressof использует reinterpret_cast, но пользователю знать об этом необязательно.
Спасибо remark-у и Вам за ответы, но сообщение remark-а меня как-то не особо вдохновило, но по прочтении вашего письма и раздумий по это поводу, я пришел к выводу, что const_cast — действительно сильно нехорошо.
RO>Нашел как начинать! Прочитай: http://www.jelovic.com/articles/stupid_naming.htm
Почитал, прикольно, а я то все думал почему в MFC с "С" наименование классов начинается, ну для себя решил, что от слова class.
Здравствуйте, Аноним, Вы писали:
А>...но сообщение remark-а меня как-то не особо вдохновило...
Это общепринятая практика.
Так делается и в стандартной библиотеке и в boost и в mfc, да везде. На сегоднящний день с++ не предоставляет лучшего решения проблемы.