[英]Wrapper for std::queue emplace
我正在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行:
@第21行:
有什么干凈的方法可以利用底層隊列的emplace
函數? 我並沒有做任何對性能至關重要的事情,因此,如果最終遇到的麻煩超過了它的價值,我將迫使調用者使用push
。
任何解決方案都必須使用VC ++ 11-切換平台或編譯器不是我的選擇。
我最終通過在項目設置中將Platform Toolset更改為2012年11月CTP來使它起作用。 正如其他人指出的那樣,代碼本身是正確的。 參見下面的簡單示例。
MyQueue.h:
#pragma once
#include <queue>
template <typename T>
class MyQueue
{
public:
template <class... Args>
void emplace(Args&&... args);
private:
std::queue<T> mQueue;
};
template <typename T>
template <class... Args>
void MyQueue<T>::emplace(Args&&... args)
{
mQueue.emplace(std::forward<Args>(args)...);
}
Main.cpp的
#include "MyQueue.h"
struct Test
{
int mA, mB;
Test(int a, int b) : mA(a), mB(b) { }
};
int main()
{
MyQueue<Test> q;
q.emplace(1, 1);
q.emplace(2, 2);
q.emplace(3, 3);
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.