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"); });
Poproszę o nieco szerszy widok: Jaki problem próbujesz rozwiązać za pomocą funkcji 'exec'? Brzmi trochę brzydko. – GManNickG
Próbuję utworzyć typ unii algebraicznej. – axilmar
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. –