Próbuję zrozumieć, kiedy nadszedł właściwy czas, aby użyć niektórych struktur, które pochodzą z boost
i miał pytanie dotyczące korzystania z boost::optional
z odniesieniem.boost :: opcjonalnie <T&> vs T *
Załóżmy, że mam następujące klasy, stosując boost::optional
:
class MyClass {
public:
MyClass() {}
initialise(Helper& helper) {
this->helper = helper;
}
boost::optional<Helper&> getHelper() {
return helper;
}
private:
boost::optional<Helper&> helper;
}
Dlaczego chciałbym używać wyżej zamiast:
class MyClass {
public:
MyClass() : helper(nullptr) {}
initialise(Helper& helper) {
this->helper = &helper;
}
Helper* getHelper() {
return helper;
}
private:
Helper* helper;
}
Obaj przekazać tę samą intencję, to znaczy, że getHelper
mógł wrócić null
, a rozmówca nadal musi sprawdzić, czy pomocnik został zwrócony.
Czy powinieneś używać tylko boost::optional
, jeśli potrzebujesz znać różnicę między "wartością", nullptr
i "nie wartością"?
doładowanie :: opcjonalnie tylko opakowanie T *. Preferuj T * niż boost :: opcjonalnie z powodu boost :: opcjonalnie jest dziwne w C++. T * ma lepszą czytelność –
jean