2016-02-24 5 views
9

In diesem Szenario Darsteller:std Funktionsobjekt zurück zu Funktors struct

struct Holder { 
    std::function<void()> f; 
}; 
struct Functor { void operator()(){ /**/ } }; 
int main() { 
    Holder = { Functor{} }; 
    //... 

Gibt es eine Möglichkeit zu f zurück zu einem Functor Typ später werfen?

+0

Die kurze Antwort ist: Nein. Worum geht es bei "type radition"? –

+3

@SamVarshavchik: Die etwas längere Antwort ist "Ja": -S –

Antwort

8

Die target Elementfunktion ist std::function 's Typ-Unerasing Cast. Sie müssen den Zieltyp kennen:

#include <cassert> 
#include <functional> 

struct Functor { void operator()(){ /**/ } }; 

int main() 
{ 
    std::function<void()> f = Functor(); 
    Functor * p = f.target<Functor>(); 
    assert(p != nullptr); 
} 
+0

[Demo] (https://ideone.com/7HaQ95) –

+0

Das ist eine gute Idee, sollten Sie das ein bisschen markieren. AFAIK man gewinnt nicht die (Ziel-) Zielinstanz, weißt du, ob es für die Lebensdauer der std-Funktionsinstanz gültig bleibt? –

+0

@DanielJour: Wenn Sie das Funktionsobjekt neu zuweisen oder tauschen, verlieren Sie das gehaltene Ziel. –

Verwandte Themen