Я программирую текстовую видеоигру. У меня есть класс consolePrinter
, который обрабатывает вывод для отображения. Чтобы облегчить индивидуальную раскраску слов в списках, таких как Inventory
, другой пользовательский класс, у меня есть структура, определенная в заголовочном файле consolePrinter
, например:
struct ListLineElement {
public:
ListLineElement(string toPrint) : ListLineElement(toPrint, "White", "Black") {
}
ListLineElement(string toPrint, string color) : ListLineElement(toPrint, color, "Black") {
}
ListLineElement(string toPrint, string foregroundColor, string backgroundColor)
: toPrint(toPrint), foregroundColor(foregroundColor), backgroundColor(backgroundColor) {
}
string toPrint;
string foregroundColor;
string backgroundColor;
};
Затем в Файл. cpp, я объявил метод listline()
, который передает данные строки методу write()
для его печати. write()
работает, хотя.
Метод listLine()
выглядит следующим образом:
void consolePrinter::listLine(initializer_list<pair<ListLineElement, int>> line)
{
for (auto i : line) {
write(i.first.toPrint, i.first.foregroundColor, i.first.backgroundColor, i.second);
Sleep(50);
for (int i = 0; i < inventoryStringSizes.spacing; i++) {
cout << ' ';
}
}
}
Может показаться сложным (и, возможно, немного уродливым ;-)) иметь `initializer_list> в качестве параметра, но я думаю, что это единственный способ, с помощью которого я смогу написать что-то вроде
consolePrinter::listLine({
{{i.name, i.colorOptions.name.first, i.colorOptions.name.second}, consolePrinter::inventoryStringSizes.name},
});
без необходимости фактически вызывать конструктор ListLineElement
.
Теперь, когда я попробуйте скомпилировать это, компилятор Visual Studio выдает ошибку
error C2398: Element '1': conversion from 'initializer list' to
'std::pair<std::initializer_list<std::string>,int>' requires a
narrowing conversion```
Что я могу сделать, чтобы это исправить? Я уже пытался передать элементы ListLineElement
напрямую как initializer_list
, а затем вручную их разыграть, но это ничего не дало.
Заранее спасибо; -)