有没有理由使用私有typedef,如下所示?我看到使用typedef减少重复可能出现的错误的好处,但这些好处也可以通过public typedef实现。
template < typename T >
class foo
{
typedef typename T::some_type reused_type;
public:
reused_type go();
};
答案 0 :(得分:3)
使用typedef
的一个实际原因是避免必须在任何地方写typename
,并且将其公之于众的一个实际理由是避免出现同样情况(在这种情况下,类型)由多个不同的名称引用。
答案 1 :(得分:1)
我可以设想的一个原因是,当且仅当它们构成已发布界面的一部分时,事物应该是公开的。请记住,模板可以是专用的,如果有问题的类型仅与某些特化而非其他特殊化相关,则它不应该是公开的。例如:
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
,但没有其他内容。