Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 2. říjen 2015, 11:28:38 Předmět: C++ and function pointers |
|
|
Potřeboval jsem pointery na funkce, které by měly opožděné volání. Tzn. nastavit parametry předem a zavolat to někde jinde a navíc univerzálním voláním, abych mohl mít takto nabindovanou libovolnou funkci.
Postupně jsem s pomocí StackOverflow dokonvergoval k nějakému řešení (přes naprosté ale plus minus funkční šílenosti). Nakonec jsem udělal nějaký benchmark, zahrnující i některé ty šílenosti a popis výsledného řešení.
Kdo by se chtěl podívat, tak tady:
http://www.perry.cz/clanky/functions.html
Případné nápady a názory směřujte sem do diskuze.
Díky _________________ Perry.cz |
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 4. říjen 2015, 20:06:42 Předmět: |
|
|
Nějak to nechápu. Co to vlastně umí? Když říkáš, že se chceš nastavit parametry funkce a to pak zavolat později, tak bych normálně použil std::bind - čímž z jakékoliv funkce můžeš udělat std::function<void()>.
http://en.cppreference.com/w/cpp/utility/functional/bind napsal: |
The function template bind generates a forwarding call wrapper for f. Calling this wrapper is equivalent to invoking f with some of its arguments bound to args. |
|
|
Návrat nahoru |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 4. říjen 2015, 21:35:23 Předmět: |
|
|
Uložím si do proměnné typu IFunction ten "callback" a pak ho volám přes ten interface.
Něco jako:
kód: |
class SceneManager
{
std::vector<IFunction *> regFunctions;
}
class Something
{
void Update()
{
SomeFunction * x = new SomeFunction();
sceneManager->RegFunction(x);
x->SetArgs(....)
}
}
//někde ve "scene manager" update metodě
foreach (IFunction t) t->Call()
|
tohle s obyčejným std::function a std::bind neudělám.
Navíc std::bind je jednorázový, nejsem schopný pak ty parametry změnit (pokud nepoužiju reference) a pořád jsem limitovaný návratovou hodnotou. Tady si ji uložím do interní proměnné toho mého "wrapper" a pak si ji někdě zase přečtu až po zavolání, když bude potřeba _________________ Perry.cz |
|
Návrat nahoru |
|
 |
|
|
Nemůžete odesílat nové téma do tohoto fóra Nemůžete odpovídat na témata v tomto fóru Nemůžete upravovat své příspěvky v tomto fóru Nemůžete mazat své příspěvky v tomto fóru Nemůžete hlasovat v tomto fóru
|
Powered by phpBB © 2001, 2005 phpBB Group
Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna