Generator w C++

0

Czy możecie polecić dobrą i nowoczesną implementację generatora w C++11? Wiem że można w oparciu o to http://www.chiark.greenend.org.uk/~sgtatham/coroutines.html (implementacja w oparciu o switch/case i makra). Mam chyba jednak alergię na makra :-/ Coś na szablonach, strukturach, lambdach... stosowalne w kontekstach z kontenerami i bez "udziwnionej składni" wywoływanych makr.

Będę wdzięczny również za pomysły w jakim kierunku iść z ew. samodzielną implementacją.

3

boost::corountine albo jak masz dostęp do VS2015 to możesz rzucić okiem na proposal microsoftu z ich implementacją resumable functions __await i __yield.

Btw, @Mokrowski powiedz co zamierzasz zrobić wtedy będzie prościej coś powiedzieć, czy iść w stronę corountines czy może to jakiś inny przypadek (np. coś w stylu lock-free).

0
satirev napisał(a):

Btw, @Mokrowski powiedz co zamierzasz zrobić wtedy będzie prościej coś powiedzieć, czy iść w stronę corountines czy może to jakiś inny przypadek (np. coś w stylu lock-free).

Platforma ARM, system GNU/Linux.
Raczej coroutines z bezpiecznymi stosami dla wywołań (nie współdzielony i wymagający stosowania static na każdym kroku). lock-free nie istotny. Kod w 1 wątku. W projekcie są stosowane wątki ale było by najlepiej by generator nie używał dodatkowego wątku (zresztą po grzyba?). Jakby jawnie skakał/robił call funkcji/metody i zostawiał porządek w ramkach stosu, to już byłbym totalnie szczęśliwy. Co ciekawe dopuszczone setjmp() i longjmp().(bzdura.. ktoś nie upilnował, MISRA nie dopuszcza)
Jak by to ugryźć.. bo znalazłem (moim zdaniem trochę "potworka") http://www.codeproject.com/Articles/29524/Generators-in-C . Ale makra :-/ I jakoś mnie instynktownie.... odrzuca... :-/

1

Napisz coś więcej. Co ma yieldować generator, jak często jest wołany etc.

0

Na razie generator ma yieldować zwykłego POD'a. Już go sobie przerobię na coś co będzie bardziej użyteczne z obiektem, semantyką przenoszenia itp. Chodzi mi tylko o koncepcję..
Co do wywołania, to myślę że to było by ok..... Oczywiście z dokładnością do typu i rodzaju argumentów:

for(auto v : generator<FunctionType>(Arg1, Arg2...)) {
    ...
}
1

@Mokrowski dlaczego nie chcesz zdefiniować statycznego generatora?

1 użytkowników online, w tym zalogowanych: 0, gości: 1