【问题标题】:C++ NEW Object as parameter (Like Java)C++ 新对象作为参数(如 Java)
【发布时间】:2013-05-08 03:19:05
【问题描述】:

我正在用 C++ 编写一些东西,和往常一样,如果该语言中存在类似的东西,我们会有一些“想法”...

我现在对作为参数传递的对象存有疑问。

我总是做的是创建一个新对象,并将它的实例作为指针传递,如下所示:

mObject* obj1 = new mObject();
obj1->callback(the_callback_function);

function_that_needs_obj(obj1); // (or the reference, if I didn't instantiated a pointer).

没关系,工作正常,这个没有问题。但是,当我使用 Java 时,我曾经这样做过:

function_that_needs_obj(new mObject(){
    public void onCallback(){
        // Custom code enters here....
    }
});

在 C++ 中有这样的“排序”用途吗?因为对于我需要创建的每个回调:一个Extended class,或者,一个functionNamedVeryLongBecauseThereAreMany 必须写在代码的顶部,而那种“混淆”了很多代码......

而且,如果我调用 FUNCTION 回调,则所有 Object 变量都无法通过 this 访问...

【问题讨论】:

  • C++ 中的回调更加容易。只需采用任何可调用类型并传递一个 lambda。
  • @chris ,“实现”回调没有问题,只是增强代码的问题...如果我向新对象发送可调用类型,可调用类型将无法access 对象数据,仅当它使用全局范围时。
  • 对不起...我不是英语母语...

标签: java c++ class object coding-style


【解决方案1】:

如果你的编译器支持c++11,你可以像这样使用lambda表达式:

function_that_needs_obj([]()
                        {
                           // Custom code enters here....
                        });

What is a lambda expression in C++11?

【讨论】:

  • 抱歉,我没听说过那个编译器
  • "Arduino" 实际上不是编译器,它使用 GCC,但有什么方法可以“启用”它吗?
【解决方案2】:

你可以在 boost lambda 中找到你需要的东西!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多