2010-11-05 17 views
5

Jak można uzyskać dostęp do typów parametrów funkcji lambda w C++? Następujące elementy nie działają:Jak uzyskać dostęp do typów lambda w C++ 0x?

template <class T> struct capture_lambda { 
}; 

template <class R, class T> struct capture_lambda<R(T)> { 
    static void exec() { 
    } 
}; 

template <class T> void test(T t) { 
    capture_lambda<T>::exec(); 
} 

int main() { 
    test([](int i)->int{ return 0; }); 
} 

Powyższe nie jest kompilowane, ponieważ kompilator wybiera prototyp szablonu zamiast specjalizacji.

Czy istnieje sposób na wykonanie powyższych czynności?

Co faktycznie próbuję osiągnąć, to: Mam listę funkcji i chcę wybrać odpowiednią funkcję do wywołania. Przykład:

template <class T, class ...F> void exec(T t, F... f...) { 
    //select the appropriate function from 'F' to invoke, based on match with T. 
} 

na przykład, chce się wywołać funkcję, której INT '

exec(1, [](char c){ printf("Error"); }, [](int i){ printf("Ok"); }); 
+1

Poproszę o nieco szerszy widok: Jaki problem próbujesz rozwiązać za pomocą funkcji 'exec'? Brzmi trochę brzydko. – GManNickG

+0

Próbuję utworzyć typ unii algebraicznej. – axilmar

+0

Rozdzielczość przeciążeniowa dla dowolnych typów obiektów funkcyjnych ... Nie mogę wymyślić, jak to zrobić. Jeśli wyeksportują swoje typy parametrów, można to zrobić. W przeciwnym razie nie mam pojęcia. –

Odpowiedz

2

nie jest to możliwe, funkcji lambda są cukier składniowym dla tworzenia funkcji nie obiektów rzeczywistych funkcji. Oznacza to, że szablon akceptuje klasę, a klasy nie mają pojęcia o typie argumentu :.

Należy również pamiętać, że ogólny obiekt funkcji może mieć dowolną liczbę przeciążonych operator() s.

Powiązane problemy