Ну, я не большой поклонник этого, если вы не разрабатываете MyClass
для специального использования только в объектах shared_ptr, и в этот момент я бы настаивал на том, чтобы требование выполнялось.
Это немногоСмешно помещать typedefs для каждого несвязанного экземпляра шаблона, который вы можете использовать с данным объектом.Тот факт, что вы можете поместить MyClass
в shared_ptr, не является хорошей причиной для его определения там.Вы собираетесь поместить typedefs для std :: vector, map, list, unordered_map, set, deque, .... и т. Д. И т. Д. И т. Д.
Но если MyClass
расширяет shared_from_this и имеет частные / защищенные конструкторытак что он может быть создан ТОЛЬКО ТОЛЬКО и сразу же назначен для shared_ptr, тогда ... конечно ... это часть интерфейса.
Если вы пытаетесь избежать необходимости вводить длинные списки параметров для создания экземпляраshared_ptr для шаблонного типа с большим количеством параметров, тогда лучшая ставка - это служебный объект EXTERNAL, как показано в цитированной вами статье:
template < typename T >
struct instantiate_shared_ptr { typedef shared_ptr<T> type; };
template < typename after typename > struct my_complex_template {};
typedef my_complex_template<some parameters> mct_1;
typedef instantiate_shared_ptr<mct_1>::type mct_1_sp;