簡體   English   中英

std :: queue emplace的包裝

[英]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行:

  • C2011:'':'枚舉'類型的重新定義
  • C2143:語法錯誤:在'...'之前缺少','
  • C2332:“類”:缺少標簽名稱

@第21行:

  • C2059:語法錯誤:'...'
  • C2065:“ Args”:未聲明的標識符

有什么干凈的方法可以利用底層隊列的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM