У меня есть два контейнера:C++ 11 Диапазон основе для цикла: как использовать контейнер с объектами и указателями-объект
std::vector<ObjectClass> vecD; // container of objects
std::vector< ObjectClass* > vecP; // container of pointers
в моем коде, я хочу, чтобы цикл по всем элементам , Насколько я знаю, мне нужно, чтобы написать различные for
петли, что означает
// container of objects
for (const auto& elem : vecD)
elem.doStuff();
// container of pointers
for (const auto& elem : vecP)
elem->doStuff(); // the "->" is needed instead of "."
Есть ли способ сказать петлю «если elemets являются объекты, использовать их непосредственно. В противном случае, разыменования них первым»?
обновление Вот более сложный пример, чтобы уточнить:
У меня есть эти контейнеры. Они каждый используется в шаблонных функции:
template< typename ContainerT >
void myfunc(const ContainerT& container)
{
for (const auto& elem : container)
{
if (elem_is_a_pointer) //how can this work?
elem->doStuff(); // member function
else
elem.doStuff();
}
}
В этом случае, я до сих пор нужно различие. То, что я хочу, - это «интеллектуальный» цикл, который обрабатывает оба контейнера –