我正在尝试编译代码审查上发布的以下线程池程序来测试它.
https://codereview.stackexchange.com/questions/55100/platform-independant-thread-pool-v4
但我得到了错误
threadpool.hpp: In member function ‘std::future)(args)...))> threadpool::enqueue_task(Func&&, Args&& ...)’: threadpool.hpp:94:28: error: ‘make_unique’ was not declared in this scope auto package_ptr = make_unique > (std::move(bound_task), std::move(promise)); ^ threadpool.hpp:94:81: error: expected primary-expression before ‘>’ token auto package_ptr = make_unique >(std::move(bound_task), std::move(promise)); ^ main.cpp: In function ‘int main()’: main.cpp:9:17: error: ‘make_unique’ is not a member of ‘std’ auto ptr1 = std::make_unique (); ^ main.cpp:9:34: error: expected primary-expression before ‘unsigned’ auto ptr1 = std::make_unique (); ^ main.cpp:14:17: error: ‘make_unique’ is not a member of ‘std’ auto ptr2 = std::make_unique (); ^ main.cpp:14:34: error: expected primary-expression before ‘unsigned’ auto ptr2 = std::make_unique ();
ComicSansMS.. 126
make_unique
是即将推出的C++ 14功能,因此即使符合C++ 11标准,您的编译器也可能无法使用它.
但是,您可以轻松地实现自己的实现:
templatestd::unique_ptr make_unique(Args&&... args) { return std::unique_ptr (new T(std::forward (args)...)); }
(仅供参考,这里的最终版本make_unique
被投票到C++ 14中.这包括覆盖数组的附加功能,但总体思路仍然相同.)