Re[3]: подскажите еще по string& func()
От: Bell Россия  
Дата: 28.01.05 15:26
Оценка:
Здравствуйте, hal, Вы писали:

hal>Здравствуйте, Bell, Вы писали:


B>>Покажи, что ты собираешься возвращать из функции при удачном раскладе. Плюс было бы неплохо узнать, что ты хочешь получить в конечном итоге.


hal>Вот:


hal>
hal>string& CGIRequest::operator[](string& key) {
hal>    CGIRequestMap::iterator iter;
hal>    iter = m_variables.find(key);
hal>    return iter->second;
hal>}
hal>


hal>Т.е. у меня есть map со списком ключей и значений... Мне надо вернуть значение по ключу... А в случае, если ключ не найден, сообщить об этом...

Т.е. получается, что ситуация, когда запрашиваемый ключ отсутствует, вполне естественна. В этом случае, ИМХО, указатели подходят больше. В конкретной ситуации можно посткпить так:
const char* CGIRequest::operator[](const string& key) {
    CGIRequestMap::iterator iter;
    iter = m_variables.find(key);
        if(variables.end() != iter)
       return iter->second.c_str();
        else
           return 0;
}


Таким образом и управление памятью возложено на std::string, и результат поиска просто интерпретируется. Но это конечно, если потом не трудно будет с указателем работать...

hal>Прошу сильно не пинать, я давно не юзал ни Си, не плюсы... Почему-то решил уж если юзаю плюсы, то буду использовать string и ссылки... Видать мне нужно RTFM про ссылки и указатели и отличия между ними...


ИМХО подход "или только это, или только вот это" — не есть хорошо

hal>Тогда еще вопрос... Будет-ли "красиво" и по стилю делать так:

hal>
hal>char* method() {
hal>  char* value;
hal>  ............
hal>  if (...) {
hal>    return value;
hal>  } else {
hal>    return NULL;
hal>  }
hal>}
hal>


hal>или все же лучше стринги, ссылки и исключения?


Однозначно тебе на этот вопрос никто не ответит. Конкретное решение всегда должно приниматься на основании конкретных требований. Просто старайся делать так, чтобы эту твою функцию удобно было использовать. Если, к примеру, каждый ее вызов придется оборачивать в try/catch, то заранее готовся к "комплиментам" со стороны пользователей этой функции
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.