std::shared_ptr<const T> Class::get_field() const
{
return const_pointer_cast<const T>(number_);
}
Левый const точно не имеет никакого смысла auto ptr = obj.get_field(); // ptr is a mutable copy Что касается остальной части вопроса – не подскажу, но у меня он вызывает некоторую долю скептицизма – я бы предпочёл не возвращать поля через shared_ptr. Я бы в принципе усомнился в кодовой базе, где shared_ptr используется столь... буднично
Ну мне нужен просто пойнтер на интерфейс, и его функционал для другого класса, так что норм я думаю
А левый конст я так понял неявно к типу даётся при возврате?
Нет. Левый конст очень легко испаряется, вот на вашем примере: const std::shared_ptr<const T> x; std::shared_ptr<const T> y = x; Всё, y неконстантный. И какой тогда смысл в константном x? x эквивалентен тому, что возвращается из вашего метода, а y тому, куда оно присваивается. Вы не можете запретить делать неконстантную копию вашего константного указателя
Это возврат внутри класса или наружу отдаёте?
Наружу это ненормально, так как получатель должен знать кишки класса, откуда поле получил, а это нарушение инкапсуляции и прочего
Какие кишки? Зачем ему знать откуда данные получил? Если он знает откуда данные получает, он увеличивает связанность, не понял короче что вы хотите сказать
Какую инкапсуляцию? Я ему константные данные возвращаю
std:: vector<std::string> a { "#", "+"}; std::list<std::string> b{"&"}; b.push_back(a.at(0)); нарушается инкапсуляция?
Не связность, а зацепление. И не откуда, а что он получил.
Всмысле что получил? Это статический язык
Да откуда эти термины? Кишки, зацепление?
Связность против зацепления, тут гугл в помощь. Кишки просто короче чем детали внутренней реализации.
Вы хотите сказать агрегация а не зацепило?
https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%86%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)?wprov=sfti1
Если класс знает детали внутренней реализации других классов это как раз и нарушается инкапсуляция
О чем и речь. У вас указатель на внутреннее поле, вроде как.
В Википедии которую вы мне скинули сразу синонимом дают Зацепление[1], сцепление, связанность, сопряжение[2. Я вас ваще не понимаю, против себя чтоле?
С чего вы взяли? Там нигде это не написано, у меня лично он представлен в контейнере
Тут сорри, связанность прочёл как связность.
Какой вопрос, такой ответ.
Обсуждают сегодня