c++ - 同一个类中的 typedef 变量。这是一个好习惯吗?

标签 c++ templates typedef

最初我试图对模板类进行 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/

相关文章:

c++ - QT CREATOR - 我把/NODEFAULTLIB 放在哪里 :library?

c++ - 使用 lambda 函数处理 C++ libsigc++ 信号

javascript - 使用 CSS 缩放所有 svg 元素

c++ - 需要帮助解码这个 typedef

c++ - 在 C++ 模板类中,我可以使用相同的名称对模板参数进行类型定义吗?

c - 如何在 .h 中转发 typedef 结构

c++ - 为什么否定静态成员变量会产生链接器错误?

c++ - 继承中的析构函数

c++ - 类模板上的重载方法,总是无法将函数定义与声明相匹配

c++ - 模板函数特化,C++