在公共接口中使用的私有typedef

时间:2013-04-10 22:38:05

标签: c++ templates

有没有理由使用私有typedef,如下所示?我看到使用typedef减少重复可能出现的错误的好处,但这些好处也可以通过public typedef实现。

template < typename T >
class foo
{
  typedef typename T::some_type reused_type;
public:
  reused_type go();
};

2 个答案:

答案 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,但没有其他内容。