私は 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: 'class': タグ名がありません
@ 21 行目:
- C2059: 構文エラー: '...'
- C2065: 'Args': 宣言されていない識別子
emplace
基になるキューの機能を利用するクリーンな方法はありますか? 私はパフォーマンスが重要なことは何もしていないので、価値以上のトラブルが発生した場合は、呼び出し元に強制的にpush
.
どのソリューションも VC++11 を使用する必要があります。プラットフォームやコンパイラを切り替えることは、私にとって選択肢ではありません。