标签: callback

C++ 成员函数作为外部库的回调函数

以下是我正在尝试做的事情的基本想法。我有一个外部库,我想在现有项目中使用它。当然,我无法更改外部库中的任何内容或现有项目中的主要功能。

我面临的问题是如何将我在类中创建的回调函数作为函数指针传递给这个外部函数。同时,此回调函数必须有权访问该类的成员,因此我不能简单地将其设为静态。我该怎么做?

Class ExternalClass //This I cannot mess with.
{
    //somestuff
    void ExternalFunc (void(* callback)(int, const void*), const void *);
}

Class MyClass
{
    //somestuff
    ExternalClass m_ExObj;
    void Callback(int x, const void *p){
        //dosomething
        //How do I use this pointer ?
    }

    void MyFunc(){
        m_ExObj.ExternalFunc(/*Some way to put MyClass::Callback() in here*/)
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ callback member pointer-to-member

0
推荐指数
1
解决办法
3524
查看次数

退出模块,但不退出整个 NodeJS 进程

我有一个复杂的解析/文本处理模块,有时,在回调链的深处,会遇到不可恢复的错误,本质上是:

console.log('Things went bad. Aborting.');
process.exit(1);
Run Code Online (Sandbox Code Playgroud)

我想从 gulp 文件中调用这个模块。这样做child_exec()工作正常。但也许对模块来说更优雅require(),然后进行常规调用。

问题是process.exit()在这种情况下调用会导致整个进程退出,这是我不希望的:gulpfile 应该优雅地处理错误。

有没有什么方法可以实现这一目标,而不需要有效地跟踪abort标志并确保在提出标志后不会继续进行处理?

callback exit abort node.js gulp

0
推荐指数
1
解决办法
947
查看次数

为什么我的“click”addEventListener 在页面加载时被调用

我有一个 id #login 的按钮和一个包含以下行的 javascript 文件:

document.getElementById('login').addEventListener('click', 'LoginPressed()')
Run Code Online (Sandbox Code Playgroud)

作为测试,我做了这个功能:

function LoginPressed(){
  console.log('was login pressed already??')
}
Run Code Online (Sandbox Code Playgroud)

每次页面加载时我的函数都会被调用。我该如何阻止这种情况发生?

请注意,我还尝试了不在引号中的回调,而不是作为函数:

document.getElementById('login').addEventListener('click', LoginPressed())
document.getElementById('login').addEventListener('click', LoginPressed)
document.getElementById('login').addEventListener('click', 'LoginPressed')
Run Code Online (Sandbox Code Playgroud)

javascript jquery callback event-handling addeventlistener

0
推荐指数
1
解决办法
1139
查看次数

从另一个 bash 函数获取输出和返回值

在 function_two 中,我需要获取 echo 的输出和 function_one 的返回值

#!/bin/bash
function_one() {
    echo "okay then"
    return 2
}
function_two() {
    local a_function="function_one"
    local string=`${a_function}`
    echo $string # echos "okay then"
    echo "$?" #echos 0 - how do we get the returned value of 2?
}
function_two
Run Code Online (Sandbox Code Playgroud)

当尝试时echo "$?"我得到0而不是2

更新

正如 Ipor Sircer 指出的,$?上面给出了上一个命令的退出代码echo $string

因此,我立即获取退出代码。正如 choroba 提到的,变量的本地化和赋值需要分开。

这是工作脚本:

#!/bin/bash
function_one() {
    echo "okay then"
    return 2
}
function_two() {
    local a_function="function_one"
    local string
    string=`${a_function}` …
Run Code Online (Sandbox Code Playgroud)

bash function callback

0
推荐指数
1
解决办法
1219
查看次数

如何使用 java 从 kotlin 类读取回调 (Android)

这是我的科特林课程:

class example {

    var a = 0

    fun add(b: Int, callback: (Int) -> Unit){
        a += b
        callback(a)
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在java代码中使用这个函数?

java android callback kotlin

0
推荐指数
1
解决办法
1439
查看次数

C++ 回调另一个成员函数

我有一个关于回调的问题。之前,我将回调与 Q 类关联

class Q{
   using Callback = std::function<void(char*, int)>;
   Q:Q();
   Q:~Q();

   void Q::RegisterCB(Callback callbackfunc)
   {
       callback_func = callbackfunc;
   }

   void Q:someEvent()
   {
      callback_func();
   }
};

void handleCallback( char*, int)
{
   // perform some routine

}

// from my main file
int main()
{
   Q q;
   q.RegisterCB(&handleCallback);

}
Run Code Online (Sandbox Code Playgroud)

这对我来说很有效。但是,当我需要将handleCallback函数转移到另一个类以获得更清晰的代码时。我在使用相同的代码时遇到问题

class R{

   void R::handleCallback( char*, int)
   {
   // perform some routine

   }

   void R::someOp()
   {
       // q is some member variables of R
       q.RegisterCB(&R::handleCallback, this);

   }
Run Code Online (Sandbox Code Playgroud)

};

然而,我遇到了一些问题,说“没有匹配的函数可以调用......”。我认为这只是简单地从函数名称分配到类函数名称

我可以提示一下我可能会出错的地方吗?

问候

c++ callback

0
推荐指数
1
解决办法
157
查看次数

如何注册一个简单的回调函数并将参数传递给该函数?

我想做的是:

  • 一个简单的函数“register_function”,允许用户指示要调用的回调函数(该用户已实现)
  • 当使用“call_callback”调用该函数时,能够像缓冲区一样传递参数

这是我的代码:

static void (*callback)(int *buffer, int size) = NULL;

void register_callback(void (*ptr)())
{
    (*callback) = ptr;
}

void call_callback(int *buffer, int size)
{
    (*callback)(buffer, size);
}
Run Code Online (Sandbox Code Playgroud)

问题是我在 register_callback 声明中遇到编译时错误。

c function-pointers callback

0
推荐指数
1
解决办法
881
查看次数

std::function 请求从“x”到非标量类型“y”的错误转换?

我有以下代码来演示在另一个函数内调用的函数。

\n

下面的代码可以正确运行:

\n
#include <iostream>\n#include <functional>\n\nint thirds(int a) \n{\n    return a + 1;\n}\n\ntemplate <typename T, typename B , typename L>\n//------------------------------------------------VVVVV-\nint hello(T x, B y, L func) \n{\n    int first = x + 1;\n    int second = y + 1;\n    int third = func(6);\n    return first + second + third;\n}\n\nint add() \n{\n    std::function<int(int)> myfunc = thirds;\n    return hello(1, 1, myfunc);  // pass thirds function from here\n}\n\nint main() \n{\n    std::cout << add();\n    return 0;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

在这里

\n

但现在我想传递一个Number具有返回类型的类型( …

c++ class function callback c++11

0
推荐指数
1
解决办法
346
查看次数

Monkeypatching Python中的方法调用

如何在Python中推迟属性访问?

我们假设我们有:

    def foo():
        ...

    class Bar:
        ...

    bar = Bar()
Run Code Online (Sandbox Code Playgroud)

是否可以实现Bar以便bar访问任何时间,foo()将提供回调返回的值?

barname已存在于上下文中.这就是为什么它的访问语义应该被保留(它不能是一个可调用的,转换成一个类的属性,使用SomeClass.bar而不是bar也行不通).我需要按原样保留所有内容,但是更改程序以便通过bar引用即时生成的数据foo().

UPD:感谢所有人的回答,从而在Python中做这类事情似乎是不可能的.我会找到一个解决方法.

python properties reference callback

-1
推荐指数
1
解决办法
368
查看次数

如何有条件地关闭jQuery Overlay?

我正在为jQuery Overlay提供自定义关闭按钮.
单击此按钮时,我想验证Overlay中的表单,并且当且仅当表单有效时才关闭Overlay .

示例(不起作用......总是关闭,无论如何)

$('.trigger[rel]').overlay(
{
   close: '.ovclosebutton',
   onClose: function()
   {
      if( validateSomething() )
          this.getOverlay().close();
      else
          displayErrorInOverlayButDontCloseIt(); 
   }
});
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

jquery conditional overlay callback

-1
推荐指数
1
解决办法
2480
查看次数