2014-10-03 21 views
0

我正在使用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

有一段时间,我使用记事本++和命令行编译。所以,更重要的是:RCF有两种方式可以执行远程调用 - 同步和异步。 Syncronous现在可以。 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); 

“客户” 是RcfClient

大部分功能运行正常。但其中一人(看起来像别人一样)导致

pure virtual method called 
terminate called without an active exception 

而且它发生(我想)附近某处回调,因为该呼叫在服务器端正常处理。我想,这个“纯粹的虚拟”隐藏在RCF类的某个地方。不幸的是,我不能找到一种方法,如何进行调查的情况下...

UPDATE:

突然,我已经找到了治愈,但还是不完全了解的原因。

让我们来看看RCF定义:

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

它工作正常

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

原因 “纯虚方法被称为”

所以,如果我声明参数作为常量,它的工作原理。我不知道为什么,也许有人可以解释。

回答

1

从C++ 03条:13.1-3

常量和掩埋的参数 类型规范内波动类型说明符显著,并且可以用来区分 重载函数声明。

const您的定义中的类型说明符使得它完全是编译器的另一个重载函数,假定虚拟方法在这种情况下未实现。