C ++ 14: Как создавать сеттеры?

2

c++14,move-semantics,c++98,

C ++ 14, перемещать-семантику, C ++ 98,

Ответов: 0


1

Ваш объект должен быть готов к использованию после постройки. Почему бы не пройти класс А во время строительства класса B?

#include <memory>

class A
{
public:
    A(int a) : a{ a } {}
private:
    int a;
};

class B
{
public:
    B(int b, A a) : b{ b }, a{ std::make_unique<A>(a) } {}
private:
    int b;
    std::unique_ptr<A> a;
};

int main()
{
    B b(int{ 4 }, A{ 1 });
}

1

У вас могут быть два сеттера, один для rvalue refferences, другой для const &, как это:

void setA(const A& a) { a_ = a; } 
void setA(A&& a) { a_ = std::move(a); }

Или, если вы не собираетесь использовать setA с любыми другими типами, вы можете использовать универсальную референтность:

template<typename T>
void setA(T&& a_) { a_ = std::forward<T>(a); }

Но поскольку вы уже разрешили устанавливать значение, вы можете также рассмотреть возможность его публикации, так что вам не нужно беспокоиться о сеттерах.

C ++ 14, перемещать-семантику, C ++ 98,
Похожие вопросы