在C ++中创建缓冲区的问题

时间:2016-12-12 11:59:21

标签: c++ c++11 templates compiler-errors buffer

我已经创建了一个这样的缓冲结构:

template <typename T>
class locked_buffer {
public:
  locked_buffer(int n);
  locked_buffer(const locked_buffer &) = delete;
  ~locked_buffer() = default;

  int size() const noexcept;
  bool empty() const noexcept;
  bool full() const noexcept;

  void put(const T & x, bool last) noexcept;
  std::pair<bool,T> get() noexcept;

private:
  int next_position(int p) const noexcept;
  bool do_empty() const noexcept;
  bool do_full() const noexcept;

private:
  struct item {
    bool last;
    T value;
  };

  const int size_;
  std::unique_ptr<item[]> buf_;
  int next_read_ = 0;
  int next_write_ = 0;

  mutable std::mutex mut_;
  std::condition_variable not_full_;
  std::condition_variable not_empty_;
};

template <typename T>
locked_buffer<T>::locked_buffer(int n) :
  size_{n},
  buf_{new item[size_]}
{
}

template <typename T>
int locked_buffer<T>::size() const noexcept
{
  return size_;
}

但是当我尝试在我的主要功能中使用它时,

locked_buffer <std::pair<int, std::vector<std::vector<unsigned char>>>> buffer1;

我得到这样的错误:

error: missing template arguments before ‘std’ locked_buffer <std::pair<int, std::vector<std::vector<unsigned char>>>>buffer1;

我想我可能不是正确创建模板,但此时我非常沮丧,因为我无法达到任何正确的解决方案。

感谢。

1 个答案:

答案 0 :(得分:1)

正如@TomaszPlaskota所说,我创建了一个带有n个元素的locked_buffer类型的对象,其中'n'代表我正在创建的缓冲区的大小。

locked_buffer <std::pair<int, std::vector<std::vector<unsigned char>>>> buffer1(n);