Как я могу получить доступ к типам лямбда в C ++ 0x? - PullRequest
5 голосов
/ 05 ноября 2010

Как можно получить доступ к типам параметров лямбда-функции в c ++?Не работает следующее:

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; });
}

Выше не компилируется, потому что компилятор выбирает прототип шаблона вместо специализации.

Есть ли способ сделать выше?

То, чего я на самом деле пытаюсь достичь, это следующее: у меня есть список функций, и я хочу выбрать соответствующую функцию для вызова.Пример:

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

Например, я хочу вызвать функцию, которая принимает 'int':

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

1 Ответ

2 голосов
/ 08 ноября 2010

Это невозможно, лямбда-функции являются синтаксическим сахаром для создания функциональных объектов, а не реальных функций. Это означает, что шаблон принимает класс, а классы не имеют понятия тип аргумента .

Также имейте в виду, что объект общей функции может иметь любое количество перегруженных operator() s.

...