использование const_cast
От: M.Sandakov  
Дата: 13.10.06 02:58
Оценка:
Здравствуйте
Есть 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 следствие неправильного дизайна.


Заранее благодарю

С уважением, Михаил

Добавлено форматирование, удалены лишние пробельные строки — Кодт
Re: использование const_cast
От: remark Россия http://www.1024cores.net/
Дата: 13.10.06 03:38
Оценка: +1
Здравствуйте, M.Sandakov, Вы писали:

MS>Здравствуйте

MS>Есть VC++ 6.0

Обычно делают так:

const CCfgSection *GetSection(const string &Name...) const;
CCfgSection *GetSection(const string &Name...);




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: использование const_cast
От: Roman Odaisky Украина  
Дата: 13.10.06 18:55
Оценка:
Здравствуйте, 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
До последнего не верил в пирамиду Лебедева.
Re[2]: использование const_cast
От: Аноним  
Дата: 14.10.06 06:54
Оценка:
Здравствуйте, 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.
Re[3]: использование const_cast
От: remark Россия http://www.1024cores.net/
Дата: 16.10.06 08:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>...но сообщение remark-а меня как-то не особо вдохновило...


Это общепринятая практика.
Так делается и в стандартной библиотеке и в boost и в mfc, да везде. На сегоднящний день с++ не предоставляет лучшего решения проблемы.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.