2014-10-03 50 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您的定義中的類型說明符使得它完全是編譯器的另一個重載函數,假定虛擬方法在這種情況下未實現。