我已经创建了一个这样的缓冲结构:
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;
我想我可能不是正确创建模板,但此时我非常沮丧,因为我无法达到任何正确的解决方案。
感谢。
答案 0 :(得分:1)
正如@TomaszPlaskota所说,我创建了一个带有n个元素的locked_buffer
类型的对象,其中'n'代表我正在创建的缓冲区的大小。
locked_buffer <std::pair<int, std::vector<std::vector<unsigned char>>>> buffer1(n);