是否有任何理由使用如下的私有类型定义?我看到了使用 typedef 来减少重复中可能出现的错误的好处,但是这些好处也可以通过公共 typedef 来实现。
template < typename T >
class foo
{
typedef typename T::some_type reused_type;
public:
reused_type go();
};
使用的一个实际原因typedef
是避免必须在typename
任何地方编写,而将其公开的一个实际原因是避免出现同一事物(在本例中为类型)被无数不同名称引用的情况。
我可以设计的一个原因是,当且仅当它们构成已发布接口的一部分时,它们才应该是公开的。请记住,模板可以是专门的,如果所讨论的类型仅与某些专业相关而不与其他专业相关,则它不应该是公开的。例如:
template <typename T> class Foo
{
typedef typename T::value_type some_type;
some_type x;
public:
int act() { return x.get(); }
};
template <typename U> class Foo<std::vector<U*>>
{
typedef typename U another_type;
std::queue<another_type> q;
public:
int act() { return q.size() / 3; }
};
在示例中,您承诺Foo<T>::act()
总是返回一个int
,但没有别的。