将实现类中定义的typedef公开到公共类

时间:2014-04-26 18:41:30

标签: c++ c++11 typedef pimpl-idiom

我有一个容器类,它的实现隐藏在Pimpl习语中。

问题是:如何将实现类中定义的typedef公开到公共类?另外,我想确保实现细节不会在typedef中公开(我们不应该看到它是一个向量)。

下面的代码在编译期间抱怨说MyContainer::Impl是一个不完整的类型。我似乎无法找到任何解决方法。

我偶然发现How can I expose iterators without exposing the container used?指向article about type erasures的类似问题,但我不确定是否可以将所有这些阅读应用到我需要的内容中?

我正在使用C ++ 11。

class MyContainer
{
private:
  class Impl;
  std::unique_ptr<Impl> m_d;

public:
  typedef Impl::Iterator Iterator;
  //typedef std::vector<int>::iterator Iterator; //< No!

  MyContainer() = default;
  ~MyContainer() = default;
  Iterator begin();
};


class MyContainer::Impl
{
public:
  typedef std::vector<int>::iterator Iterator;

  Impl() = default;
  ~Impl() = default;

  std::vector<int> items;
};


MyContainer::Iterator MyContainer::begin()
{
  return m_d->items.begin();
}

0 个答案:

没有答案