【问题标题】:Visual C++ - anonymous methodsVisual C++ - 匿名方法
【发布时间】:2011-02-01 03:50:38
【问题描述】:

嗨 有没有办法在 Visual C++ 中使用匿名方法??

【问题讨论】:

    标签: c++ visual-c++ anonymous-function


    【解决方案1】:

    Visual C++ 2010 支持 C++0x lambda 表达式,(1) 可以用作匿名函数:

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

    (1) 更正确的说法是Visual C++ 2010 支持C++0x lambda 表达式的草案规范之一;自 Visual C++ 2010 发布以来,对该规范草案进行了一些相对较小的更改。

    【讨论】:

      【解决方案2】:

      正如其他人所说,C++0x 将支持 lambda。同时,您可以使用Boost Lambda

      【讨论】:

        【解决方案3】:

        如果您不能像其他人所建议的那样使用 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. 仿函数(类似对象的函数)

        【讨论】:

        • boost::function 的定义并不比模板解决方案更好。模板是编译时的,boost::function 是运行时的。它们是针对两个不同问题的两种不同解决方案。
        • @DeadMG 如果传递给函数的对象不匹配或不能隐式转换为代码中定义的对象,它将无法正确编译。那是我的编译时间。
        【解决方案4】:

        我假设您的意思是 C++/CLI,匿名方法是 C# 术语。不,不支持。它也不支持 C++0x lambdas。

        【讨论】:

        • 它确实支持 MSVC10 中的 lambda 表达式。
        • @DeadMG:不过,仅适用于本机 C++。据我所知,C++/CLI 编译器不支持 C++0x lambda。这个问题最初没有被标记为 [c++];我根据文本添加了该内容;也许 OP 确实是指 C++/CLI。
        【解决方案5】:

        是的,C++0x 允许使用 lambda 函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-09
          • 2011-09-12
          • 1970-01-01
          • 2015-06-23
          • 1970-01-01
          • 2014-03-07
          • 2021-05-31
          相关资源
          最近更新 更多