远程调用框架和纯虚方法

时间:2014-10-03 04:36:00

标签: c++ qt mingw protocol-buffers rcf

我使用RCF(http://www.deltavsoft.com/RCF.html)+ protobuf(https://code.google.com/p/protobuf/)进行远程函数调用(嵌入式linux服务器+ Windows客户端)。 我的问题与Windows客户端有关。

我使用MinGW和Qt 5.3.1作为客户端,但我不能使用QtCreator:如果将RCF源代码添加到INCLUDEPATH,它会不断失败。看起来它已知问题,但尚未解决: https://bugreports.qt-project.org/browse/QTCREATORBUG-12890?page=com.googlecode.jira-suite-utilities:transitions-summary-tabpanel

有一段时间,我使用notepad ++和命令行编译。所以,更重要的是:RCF有两种方式来执行远程调用 - 同步和异步。同步现在还可以。 Asyncronous是好的...除了一个案例。

我有许多与回调绑定的函数:

void p347ClientWrapper::onAsyncFunctionCompleted(RCF::Future<int> fRet, int if_code) {
     //code here is no matter
}

绑定,根据RCF的例子:

RCF::Future<int> fRet;
fRet = client->anyOfMyFunctions(
    RCF::AsyncTwoway( boost::bind(&p347ClientWrapper::onAsyncFunctionCompleted, this, fRet, if_code) ), 
    any_parameter_of_my_function);

&#34;客户机&#34;是RcfClient

大多数功能运行正常。但其中一个(看起来和其他人一样)导致

pure virtual method called
terminate called without an active exception

它发生(正如我想的那样)在回调附近,因为这个调用在服务器端正常处理。我猜,这个&#34;纯虚拟&#34;隐藏在RCF类的某个地方。不幸的是,我找不到办法,如何调查此案......

更新

突然间我找到了治疗方法,但仍然没有完全理解其中的原因。

让我们看看RCF的定义:

RCF_METHOD_R1(int,doStartRotChannel_fixed,const channel_manager::RotChannelInitParams &)

工作正常

RCF_METHOD_R1(int,doStartRotChannel_orig,channel_manager::RotChannelInitParams &)

原因&#34;名为&#34;

的纯虚方法

所以,如果我将参数声明为 const ,它就可以了。我不知道为什么,也许有人可以解释。

1 个答案:

答案 0 :(得分:1)

From C ++ 03 Section:13.1-3

  

const和volatile类型说明符隐藏在参数类型中   规范是重要的,可用于区分   重载函数声明。

定义中的

const类型说明符使其完全成为编译器的另一个重载函数,并且在这种情况下未实现所谓的虚方法。