最初我试图对模板类进行 typedef,然后我看到了“gotw 79”一文。 而且我不想创建另一个类,所以我最终做了以下事情。基本上在同一个类中进行类型定义。它显然有效。但这是一个好习惯吗?
template <typename T,typename L>
class MyClass{
typedef std::tr1::shared_ptr<MyClass<T,L> > shrdPtr;
}
谢谢。
最佳答案
好吧,我不太喜欢它,除非您将 MyClass
设计为专门仅在 shared_ptr 对象中使用,此时我会坚持要求强制执行。
为可能用于给定对象的每个不相关的模板实例化设置 typedef 有点荒谬。仅仅因为您可能将 MyClass
放在 shared_ptr 中并不是在那里对其进行 typedef 的好理由。您要为 std::vector、map、list、unordered_map、set、deque 等放置类型定义吗?
但是,如果 MyClass
扩展了 shared_from_this 并具有私有(private)/ protected 构造函数,那么它只能被创建并立即分配给 shared_ptr 然后......当然......它是接口(interface)的一部分。
如果您试图避免输入长参数列表来为具有大量参数的模板化类型实例化 shared_ptr,那么更好的选择是使用外部实用程序对象,就像您引用的文章中所示:
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;
关于c++ - 同一个类中的 typedef 变量。这是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511555/