Я бы тоже хотел добавить некоторые опции к этому старому вопросу, хотя они могут быть весьма спорными ...
Аналогично Ответ OldPeculier Мне нравятся короткие имена типов, максимально приближенные к стандартным указателям.
В проекте, который использовал shared_pointer
почти везде, я использовал
typedef boost::shared_ptr<Foo> Foo_;
// usage examples:
Foo* myFoo0;
Foo_ myFoo1;
Я воспользовался тремя вещами:
- То, что символ подчеркивания каким-то образом выглядит как оператор, но обрабатывается в основном как буква, так что он может быть частью идентификатора (и я вижу нет правила, запрещающего его в конце идентификатора ).
- Что мне нужно было только придумать one typedef.
- Я предпочитаю
Foo* myFoo1;
над Foo *myFoo1;
по нескольким причинам, и он отлично сочетается с Foo_ myFoo2
.
Когда мне нужны typedef для разных видов умных указателей, я бы выбрал
typedef shared_ptr<Foo> Foo_S;
typedef weak_ptr<Foo> Foo_W;
typedef unique_ptr<Foo> Foo_U;
// usage examples:
Foo* myFoo2;
Foo_S myFoo3;
Foo_W myFoo4;
Foo_U myFoo5;
С увеличением поддержки Unicode в стандартах и реализациях компилятора у меня возникнет соблазн попробовать следующий синтаксис, предполагая, что эти символы звездочки будут рассматриваться как обычная часть идентификатора типа. Конечно, это практично, только если у всех заинтересованных разработчиков есть удобный метод ввода текста:
typedef shared_ptr<Foo> Foo★;
typedef weak_ptr<Foo> Foo☆;
typedef unique_ptr<Foo> Foo✪;
// usage examples:
Foo* myFoo6;
Foo★ myFoo7;
Foo☆ myFoo8;
Foo✪ myFoo9;
(Быстрый тест показал, что это на самом деле не работает, по крайней мере, с моей средой сборки. Но то же самое верно для Foo_ä
.)