Определяемый пользователем тип, явно объявляющий вложенный тип

Оба цикла на основе диапазона и std::foreach предназначены для обработки элементов самостоятельно, независимо от других. Если вам нужен итератор для других элементов, вам нужно явно указать его:

auto next = infoMap.begin();
for(auto& prev: infoMap)
{
    ++next; // now points to element succeeding prev...
    if(next != infoMap.end())
    {
        // your code...
    }
}

Цикл, основанный на контуре, не выполняет итерацию в обратном порядке, но идея в конце одна и та же:

auto next = infoMap.rbegin(); 
std::for_each(infoMap.rbegin(), infoMap.rend(), [&infoMap, &next](auto& prev)
{
    ++next; // again one in advance compared to prev...
            // (other direction than in above loop, though!)
    if(next != infoMap.rend())
    {
        // your code...
    }
});

Я лично останусь с классическим циклом, хотя & ndash; это имеет то преимущество, что вы можете переместить if из него:

if(infoMap.size() >= 2)
{
    for (auto next = std::next(infoMap.rbegin()); next != infoMap.rend(); ++next)
    {
        prev = std::prev(next);
        // your code...
    }
}
-1
задан dmvianna 19 January 2019 в 08:38
поделиться

1 ответ

Используйте TypeVar() для объявления переменной типа и используйте Generic в качестве базового класса.

from typing import TypeVar, Generic
T = TypeVar('T')
class Classy(Generic[T]):
    def __init__(self, x: T) -> None:
        self.value = x
    def get_value(self) -> T:
        return self.value

Вы можете попробовать:

class1 = Classy[int](100)
class2 = Classy[str]('abc')
print(class1.get_value())
print(class2.get_value())

Тогда вы увидите:

100
abc
0
ответ дан C.K. 19 January 2019 в 08:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: