Visual C ++ - анонимные методы - PullRequest
3 голосов
/ 31 января 2011

Привет Есть ли способ использовать анонимные методы в Visual C ++ ??

Ответы [ 5 ]

13 голосов
/ 31 января 2011

Visual C ++ 2010 поддерживает лямбда-выражения C ++ 0x, (1) , которые можно использовать в качестве анонимных функций:

int i = ([](int x) { return 40 + x; })(2); // i = 42

(1) Правильнее сказать, что Visual C ++ 2010 поддерживает одну из черновых спецификаций для лямбда-выражений C ++ 0x; с момента выпуска Visual C ++ 2010 было внесено несколько сравнительно небольших изменений в этот проект спецификации.

2 голосов
/ 31 января 2011

Если вы не можете использовать C ++ 0x, как все остальные предлагали, есть несколько способов избежать того, что вы пытаетесь сделать, которые имитируют до некоторой степени, но не полностью отражают анонимный аспект:

template<typename T>
void foo(const T& _someFunctor, double _someArgument){
    _someFunctor(_someArgument);
}

Или вы могли бы иметь более определенную структуру как:

int bar(const boost::function<int(double,double)>& _aFunction, double arg1, double arg2){
    return _aFunction(arg1+2.0, arg2+2.0);
}

подход Boost :: Function , вероятно, является наиболее подходящим, поскольку он определяет очень строгий интерфейс функции, в то время какразрешение использования с:

  1. Boost :: Bind
  2. функциями
  3. функциями-членами
  4. функторами (функционируют как объекты)
2 голосов
/ 31 января 2011

Как уже говорили другие, C ++ 0x будет поддерживать лямбды. А пока можно использовать Boost Lambda .

1 голос
/ 31 января 2011

Полагаю, вы имеете в виду C ++ / CLI, анонимные методы - это термин C #. Нет, не поддерживается Он также не поддерживает лямбды C ++ 0x.

0 голосов
/ 31 января 2011

Да, C ++ 0x разрешает лямбда-функции.

...