我正在 Windows 8 上使用 Visual Studio 2012 并尝试为 std::queue 创建一个包装器,以增加线程安全性和一些其他功能。我在为 emplace 创建包装函数时遇到问题。我怀疑这是由于模拟可变参数模板的方式,但我不确定如何修复它。
template <typename T>
class MyQueue
{
public:
template <class... Args> // line 20
void emplace(Args&&... args)
{
mQueue.emplace(std::forward<Args>(args)...);
}
private:
std::queue<T> mQueue;
};
这段代码给了我一堆语法错误。
@ 第 20 行:
- C2011: '' : 'enum' 类型重新定义
- C2143:语法错误:在 '...' 之前缺少 ','
- C2332:“类”:缺少标签名称
@ 第 21 行:
- C2059:语法错误:'...'
- C2065:'Args':未声明的标识符
有什么干净的方法可以利用底层队列的emplace
功能吗?我没有做任何对性能至关重要的事情,所以如果它最终比它的价值更麻烦,我只会强迫调用者使用push
.
任何解决方案都必须使用 VC++11 - 切换平台或编译器不是我的选择。