2

是否有任何理由使用如下的私有类型定义?我看到了使用 typedef 来减少重复中可能出现的错误的好处,但是这些好处也可以通过公共 typedef 来实现。

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

2 回答 2

3

使用的一个实际原因typedef是避免必须在typename任何地方编写,而将其公开的一个实际原因是避免出现同一事物(在本例中为类型)被无数不同名称引用的情况。

于 2013-04-10T22:42:09.483 回答
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,但没有别的。

于 2013-04-10T22:49:40.010 回答