设置:我建立有部分C中的建筑和部分C++。如何通过功能从C到C++的参数和回C
以我体系结构I具有:
- 甲data_io(C)它获取的数据发送到处理器回调并输出处理的数据。
- 甲data_processor(C),其负责处理数据和按需变化。
- 甲settings_manager(C++),它决定使用哪个处理器。
的关系如下:
- 的settings_manager对象被实例化,其内部初始化与一个默认处理器功能的data_processor,然后初始化data_io发送给它的processing_callback_function(在settings_manager定义,但内部引用data_processor函数),然后在data_io启动时用它来处理数据。 (所以,在data_io在初始化接收processing_callback_function只有一次,不关心什么回调里面呢,它只是生成数据,调用processing_callback_function和输出处理后的数据)
- 当系统工作时,settings_manager可以决定改变处理的data_processor类型,所以它改变了processing_callback_function调用不同的data_processor功能(data_io不知道这件事,并继续工作)
以下是基本实现:
data_io.c :
typedef void (* ProcessorCallback_t)(float *, int);
ProcessorCallback_t processorCallback;
data_io_init(ProcessorCallback_t callback) {
processorCallback;
...init all other stuff like data pointer...
}
data_io_loop() {
bufSize = readData(&data);
processorCallback(&data, bufSize);
writeData(&data, bufSize);
}
data_procesor.c:
void data_processor_init() {
...initialization routine...
}
void data_processor_proc1(float *data, int bufSize) {
...data process...
}
void data_processor_proc2(float *data, int bufSize) {
...data process...
}
settings_manager.cpp:
void SettingsManager::start() {
data_processor_init();
this->processing_function = &data_processor_proc1;
//THIS IS MY QUESTION! HOW TO PASS THE processing_callback_function TO data_io_init
data_io_init(&SettingsManager::processing_callback_function);
... here starts a new thread to run loop below...
//while(this->condition) {
// data_io_loop();
//}
}
void SettingsManager::changeProcessorType(int processorType) {
switch(processorType) {
case 1:
this->processing_function = &data_processor_proc1;
break;
case 2:
this->processing_function = &data_processor_proc2;
break;
}
}
void SettingsManager::processing_callback_function(float *data, int buffer_size) {
this->processing_function(data, buffer_size);
}
我的问题:
1.我应该如何通过processing_callback_function C++成员函数的data_io_init C函数?
,当我做到以下几点:
data_io_init(&设定管理:: processing_callback_function);
我得到以下错误:
"Incompatible pointer types 'ProcessorCallback_t' and 'void(Engine::*)(float*,int)'"
嘛错误是显而易见的,该类型是不同的,因为第二个是一个成员函数,是对象的实例的一部分。
我读过,我应该使processing_callback_function静态,但我不知道它是否是正确的方法。
- 什么是处理这类事情的适当方式,是否有任何可能有用的读者或可能相关的编码策略?
C中的_parts(为了获得最佳性能,没有类转换或多个耗时的内存解析)_你对C++的假设是错误的。 – 2017-08-03 19:25:31
你是如何编译这些文件的,'SettingsManager'的定义是什么? – dbush
@ manni66请解释我渴望学习,可能回答我的第二个问题 – alexm