使用隐式完美转发将值添加到`std :: vector <std :: tuple <customclass,int,=“”double =“”>&gt;`

时间:2015-12-07 10:04:14

标签: c++ c++11 initialization perfect-forwarding stdtuple

我有一个std::vector std::tuple个存储整数类型的类以及一个没有复制构造函数的类。我的目标是为此向量添加值,而不在内存中创建任何不必要的MyClass副本。因为,MyClass将在我的实际应用程序中存储大量数据。

我尝试的是:

#include <vector>
#include <tuple>
#include <iostream>
#include <string>

class MyClass
{
    public:
        MyClass()                   = delete;
        MyClass(const MyClass &)    = delete;
        MyClass(const std::wstring & str, float flt)
            : Text(str), Value(flt)
        {
        }

        std::wstring Text;
        float Value;

    private:
};

int wmain(int argc, wchar_t *argv[], wchar_t *envp[])
{
    std::vector<std::tuple<MyClass, int, double>> Items;
    Items.emplace_back(L"Entry0", 2.3f, 5, 5.7);
    Items.emplace_back(L"Entry1", 3.4f, 6, 6.8);
    Items.emplace_back(L"Entry2", 4.5f, 7, 7.9);
    for (size_t i=0; i<Items.size(); i++)
    {
        std::wcout << std::get<0>(Items[i]).Text    << L'\t';
        std::wcout << std::get<0>(Items[i]).Value   << L'\t';
        std::wcout << std::get<1>(Items[i])         << L'\t';
        std::wcout << std::get<2>(Items[i])         << std::endl;
    }

    _wsystem(L"pause");
    return 0;
}

Visual Studio 2015在标准库文件“xmemory0”中的某处出现以下错误。

  

'std :: tuple :: tuple(std :: tuple&amp;&amp;)':无法将参数1从'const wchar_t [7]'转换为'std :: _ Tuple_alloc_t'   xmemory0 657

这样做的正确方法是什么?

0 个答案:

没有答案