Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建C++;以下类型的C程序的包装器类? 我以前创建了简单的C++包装类,但是我现在的问题有点混乱。我有一个自定义的硬件,可以连接到USB端口,它根据硬件的配置给出特定的信息,而不同的事件处理程序是基于这些配置执行的。它使用以太网通过USB协议。PC端的C代码如下所示: // Relevant headers int Event1handler(){ // Code to process event 1 } void Event2handler(){ // Code to process event 2 } int main(void){ // Code to setup calls to Event1handler() and Event2handler() using Open Sound Control methods } 现在我困惑了如何围绕上面的代码包装C++类。在C程序中,根据来自USB的信息自动调用事件处理程序。如何将事件处理程序实现为根据硬件发送的信息自动调用的类的方法?我可以将main()函数的内容放入类的构造函数中吗_C++_Wrapper - Fatal编程技术网

如何创建C++;以下类型的C程序的包装器类? 我以前创建了简单的C++包装类,但是我现在的问题有点混乱。我有一个自定义的硬件,可以连接到USB端口,它根据硬件的配置给出特定的信息,而不同的事件处理程序是基于这些配置执行的。它使用以太网通过USB协议。PC端的C代码如下所示: // Relevant headers int Event1handler(){ // Code to process event 1 } void Event2handler(){ // Code to process event 2 } int main(void){ // Code to setup calls to Event1handler() and Event2handler() using Open Sound Control methods } 现在我困惑了如何围绕上面的代码包装C++类。在C程序中,根据来自USB的信息自动调用事件处理程序。如何将事件处理程序实现为根据硬件发送的信息自动调用的类的方法?我可以将main()函数的内容放入类的构造函数中吗

如何创建C++;以下类型的C程序的包装器类? 我以前创建了简单的C++包装类,但是我现在的问题有点混乱。我有一个自定义的硬件,可以连接到USB端口,它根据硬件的配置给出特定的信息,而不同的事件处理程序是基于这些配置执行的。它使用以太网通过USB协议。PC端的C代码如下所示: // Relevant headers int Event1handler(){ // Code to process event 1 } void Event2handler(){ // Code to process event 2 } int main(void){ // Code to setup calls to Event1handler() and Event2handler() using Open Sound Control methods } 现在我困惑了如何围绕上面的代码包装C++类。在C程序中,根据来自USB的信息自动调用事件处理程序。如何将事件处理程序实现为根据硬件发送的信息自动调用的类的方法?我可以将main()函数的内容放入类的构造函数中吗,c++,wrapper,C++,Wrapper,编辑:我不需要为类使用单独的方法。我只需要把C程序包装成一个类。将所有事件处理程序放在一个方法中也很好(如果可能的话)。我只需要每个事件处理程序接收的数据 Edit2:下面是使用OpenSoundControl的实际事件处理程序和调用的样子: // Relevant headers int Event1handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void user_data)

编辑:我不需要为类使用单独的方法。我只需要把C程序包装成一个类。将所有事件处理程序放在一个方法中也很好(如果可能的话)。我只需要每个事件处理程序接收的数据

Edit2:下面是使用OpenSoundControl的实际事件处理程序和调用的样子:

// Relevant headers

int Event1handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void user_data){
  // Code to process event 1
}

void Event2handler(const char *path, const char *types, lo_arg **argv, int argc, void *data, void user_data){
  // Code to process event 2
}

int main(void){
    // Code to setup calls to Event1handler() and Event2handler() using Open Sound Control methods
    lo_server_thread st;
    // "if" means one integer and one float
    lo_server_thread_add_method(st, "/folder/data1", "if", Event1handler, NULL);
    lo_server_thread_add_method(st, "/folder/data2", "if", Event2handler, NULL);
}

只需创建一个类并将代码放入其中,例如在
.h
文件中:

class EventWrapper
{
public:
   EventWrapper();
   static int Event1Handler();
   static void Event2Handler();
}
#include "EventWrapper.h"
// Include relevant headers for your USB device

EventWrapper::EventWrapper()
{
   // Code to setup calls to Event1handler() and Event2handler()
   // using Open Sound Control methods.
}

int EventWrapper::Event1Handler()
{
   // Code to process event 1
}

void EventWrapper::Event2Handler()
{
   // Code to process event 2
}
然后在
.cpp
文件中:

class EventWrapper
{
public:
   EventWrapper();
   static int Event1Handler();
   static void Event2Handler();
}
#include "EventWrapper.h"
// Include relevant headers for your USB device

EventWrapper::EventWrapper()
{
   // Code to setup calls to Event1handler() and Event2handler()
   // using Open Sound Control methods.
}

int EventWrapper::Event1Handler()
{
   // Code to process event 1
}

void EventWrapper::Event2Handler()
{
   // Code to process event 2
}

在不了解程序的所有细节的情况下,您可能不得不处理什么是静态的以及如何处理它。

我根本不知道开放式声音控制,但许多基于C的回调系统(尤其是GUI)可以封装在一个类中。回调函数是静态成员函数。这些回调通常接受指向用户定义数据的指针。当您在对象的构造函数中设置回调时,您会将
作为该数据传递。回调将把指针转换回类类型,然后调用一个成员函数来执行实际的工作,传递给回调的任何额外数据。希望能有帮助。谢谢你的提示。我觉得这很相关。我将在我的帖子中添加更多的代码,这样你就可以看到OpenSoundControl是如何工作的。如果你认为你的想法是可行的,请发布一些示例代码。谢谢。我想象它会像你发布的一样,但你能看看我的第二次编辑,看看开放的声音控制相关的行吗?如果硬件正在发送Event1的数据,是否会自动调用EventWrapper::Event1Handler()?这就是让我困惑的地方。另外,请参阅我发布的一些附加代码。另一个问题与我的第一个问题有关。这可能很简单,但是..如何调用静态成员函数而不知道将通过USB发送哪些数据?这两个静态成员函数应该从USB驱动程序代码自动调用。您告诉USB驱动程序代码在需要时调用它们,因此将处理代码放在这两个函数中。您不应该调用这些静态成员函数。USB驱动程序代码就是调用这些功能(或打开声音控制)的代码。回调函数的意义在于,它在代码之外的某个事件调用该函数并处理所需的内容之前,它不会执行任何操作。也就是说,USB/OpenSound将处理某些内容,一旦有数据要报告给您,它将调用这两个静态函数。您自己不需要调用静态函数,只需向它们添加代码来处理来自USB/OpenSound的结果。非常感谢。这是有道理的。