Я не уверен, является ли это ошибкой моего синтаксиса C++ или это что-то, что вообще невозможно выполнить.
Я хочу определить класс, который принимает std::map в качестве аргумента конструктора. Затем я хочу создать экземпляр этого класса, передав «временный» (уместно называть это «rvalue»?) std::map. т.е. Я не хочу создавать lvalue std::map, а затем передавать его конструктору.
Можно ли это осуществить? Я пробовал следующее (закомментированные строки показывают неудачные попытки)
#include <map>
#include <string>
#include <iostream>
class Test
{
public:
Test(std::map<int,char>& rMap)
{
std::map<int,char>::iterator iter;
for (iter = rMap.begin(); iter != rMap.end(); ++iter)
{
mMap[iter->first] = mMap[iter->second];
}
}
virtual ~Test(){}
protected:
std::map<int, char> mMap;
};
int main()
{
std::cout << "Hello world!" << std::endl;
//Test test({1,'a'}); // Compile error.
//Test test(std::map<int,char>(1,'a')); // Also compile error.
//Test test(std::map<int,char>{1,'a'}); // Yet again compile error.
return 0;
}
Это мой компилятор:
g++ (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Ошибки компиляции могут быть опубликованы по запросу, но я не уверен, что они будут полезны, если моя проблема синтаксическая.
Спасибо.
Test test(std::map<int, char>{{1, 'a'}});
с двумя наборами фигурных скобок? - person alter igel   schedule 27.07.2016