Sono abbastanza sicuro che questa è una domanda puramente estetica, ma volevo avere tutte le tue opinioni su di esso prima di iniziare a proliferare questo tipo di codice nella mia base di codice. Considera il seguente codice:
//Foo.h
class Bar;
class Foo
{
public:
Bar& GetBar(){return *bar.get();}
private:
std::unique_ptr<Bar> bar;
};
//Bar.h
class Bar
{
public:
DoSomething(){//did something...}
};
Questo ci permette di inoltrare la barra di dichiarazione in Foo.h ed evitare di includere #include Bar.h. Questo porta all'utilizzo di Foo's Bar nel modo seguente:
Foo foo;
foo.GetBar().DoSomething();
Personalmente, penso che sarebbe molto più bello:
Foo foo;
foo.bar.DoSomething();
Per riuscirci, ho scritto:
//Foo.h
class Bar;
class Foo
{
public:
Foo();
Bar& bar;
private:
std::unique_ptr<Bar> bar_ptr;
};
//Foo.cpp
#include "Bar.h"
Foo::Foo() : bar_ptr(new Bar()), bar(*bar_ptr) {}
Questo mi consente di inoltrare la barra di dichiarazione e utilizzare la "barra". sintassi.
Ugly? Non brutto? Lo svantaggio è che ho 2 membri vars per solo 1 oggetto.