Quindi il modo in cui sono andato in giro è un po 'più specifico di ciò che stavo effettivamente facendo. Risulta che alcune informazioni che pensavo fossero a parte il punto mi hanno aiutato. Penso comunque che una tecnica simile potrebbe essere usata per qualsiasi caso.
Per una cosa ... nel mio caso "thingy <>" contiene effettivamente dei valori e viene passato alla funzione di invoker. Questo in realtà aiuta molto.
Inoltre, poiché l'oggetto era convertire le cose in thingy per servire come induce per un altro thingy strano, e gli inti che venivano passati a indicizzare la prima cosa ... gli ints finiscono per essere tutti 1 quando faccio la mia ricorsione. Così, mentre ciò che cercavo era qualcosa di simile (semplificato per rimuovere il secondo tupla):
f(get(my_thingy, idx<1>), get(my_thingy, idx<2>), ...)
Si scopre la ricorsione si libera di IDX < 2> ...IDX:
template < typename Fun, typename H, typename ... T, typename ... Args >
auto call(Fun f, thingy<H,T...> const& t, Args&& ... args)
-> decltype(call(f,static_cast<thingy<T...>const&>(t), get(t,idx<1>), std::forward<Args>(args)...)
{
return call(f, static_cast<thingy<T...>const&>(t), get(t, idx<1>), args...);
}
template < typename Fun, typename ... Args >
auto call(Fun f, thingy<> const&, Args&& ... args)
-> decltype(f(std::forward<Args>(args)...))
{
return f(std::forward<Args>(args)...);
}
non sono stato in grado di completamente prova cosa, perché la funzione non riesce get
su di me per qualche ragione quando si utilizza const & ... un pò mi incazzare. Sono abbastanza fiducioso che questo è il trucco però.
Se il parametro su idx non è sempre 1, penso che potrebbe essere inoltrato in un modo simile.
Bella risposta: mi ci vorrebbe una notte intera per inventare qualcosa del genere da solo! +1 –
Dolce. Dovrò dare un'occhiata. Pubblicherò la mia risposta che lo fa senza farlo ... ottiene la chiamata senza rispondere alla domanda che è. Sfortunatamente, mentre ci lavoravo, mi sono imbattuto in altri problemi con l'interfaccia del mio tipo sottostante, ho dato di matto per un po ', ho fatto un tentativo e sono andato a letto. –
@CrazyEddie: Sarei felice se potessi pingare (scrivi un commento qui) una volta che hai risposto :) –