Вот искомая функция, написанная на Котлине:
// these 3 classes inherit from MenuItem class
val subOptions: MutableList<MenuOption> = mutableListOf(),
val entries: List<MenuEntry> = emptyList(),
val actions: List<MenuAction> = emptyList()
fun getOrderedMenuItems(): List<MenuItem> = entries.plus(actions).plus(subOptions)
Есть ли способ обойти эту проблему с помощью std::list или другого типа контейнера? Если нет, то как еще это можно перевести? Любые подсказки будут высоко оценены.
@изменить
Возможно, я не ясно выразился. По сути, я хотел соединить эти списки в один список. Я пытался использовать splice() и merge() как таковые:
list<MenuItem> mergedList = list<MenuItem>();
mergedList.splice(mergedList.end(), actions);
И я получил это:
ни один экземпляр перегруженной функции std::__cxx11::list‹_Tp, _Alloc›::splice [с _Tp=MenuItem, _Alloc=std::allocator] не соответствует списку аргументов -- типы аргументов: (std::_List_iterator, std ::__cxx11::list‹MenuAction, std::allocator›) -- тип объекта: std::__cxx11::list‹MenuItem, std::allocator›
Вот что помогло мне:
list<MenuItem> MenuOption::getOrderedMenuItems() {
list<MenuItem> mergedList = list<MenuItem>();
for(MenuItem const& i : actions) {
mergedList.push_back(i);
}
for(MenuItem const& i : subOptions) {
mergedList.push_back(i);
}
for(MenuItem const& i : entries) {
mergedList.push_back(i);
}
return mergedList;
}
std::any
иstd::merge
- person Ranoiaetep   schedule 24.08.2020std::merge
предназначен для объединения двух отсортированных диапазонов - person Ayxan Haqverdili   schedule 24.08.2020void*
, не полностью понимают ответ и, немного погуглив, обнаруживают, что могут использоватьvoid*
для решения своей проблемы, и тратят время на написание плохого кода: p Просто хотел, чтобы ОП избежал этого: ) - person cigien   schedule 24.08.2020