Два разных слова для геттеров по ссылке против геттеров по копии

Рассмотрим следующий пример:

class MyClass
{
// Getters by copy ?
public:
inline std::string fullName() const {return _firstName+_lastName;}

// Getters by reference ?
public:
inline const std::string& firstName() const {return _firstName;}
inline const std::string& lastName() const {return _lastName;}

// Data members
protected:
std::string _firstName;
std:::string _lastName;
}

В документации моего кода я хотел бы различать геттеры по ссылке (прямой доступ к членам данных класса) и геттеры по копии (доступ к данным, построенным на членах данных класса). Какие слова я могу использовать, чтобы назвать эти две разные категории?

-1

Решение

Первый вопрос, который приходит на ум, — почему вы хотите различать операции в названии. Тем более, что это разделение подразумевает, что вы пропускаете детали своей реализации пользователям и теряете инкапсуляцию.

Рассмотрим, например, что во время профилирования реального приложения вы обнаруживаете, что 90% времени абоненты используют fullName() и не делайте копии, тогда вы можете изменить свой тип на кэш Результат и избежать затрат:

class MyClass {
// ...
std::string _fullName;
public:
const std::string& fullName() const {
return _fullName;
}
// One of the options for caching: update on set
// Could use other, like update on first request...
void setName( std::string firstName ) {
_firstName = std::move(firstName);
_fullName = _firstName + _lastName;
}
};

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

При этом, я видел, как это делалось в прошлом, когда аксессор, который просто возвращает ссылку на член, был назван либо nember, либо getMemberи операции, которые создают новые объекты, были названы как предложение с глаголом, который подразумевал конструкцию: composeFullName подразумевать, что есть вызов, связанный с вызовом операции. Это изменение в соглашениях об именах, где я видел это, было характерно для операций, где Стоимость исполнять это было высоко.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector