[英]How can I do a check of the signal/slot connect's during compilation?
在運行時檢查Qt信號插槽連接調用是我的擔心。 我應該可以運行connect語句的靜態檢查。
這樣的工具存在嗎?
使用QT5,您可以使用以下語法,該語法在編譯時進行靜態檢查:
connect(sender, &Sender::signalMethod, receiver, &Receiver::slotMethod);
這樣的工具存在嗎?
如果存在這樣的工具會很好,但遺憾的是它不存在,因為信號/槽機制在qt中實現的方式。 而且,由於這個原因,不可能靜態地檢查信號是否適合插槽。
如果qt使用像boost的信號/插槽這樣的話就有可能。
您可以考慮在C中創建GCC插件,或者使用MELT擴展,MELT是一種特定於域的語言,可以輕松編寫GCC擴展。 使用插件或MELT擴展,您可以分析內部表示(特別是表示C ++類和函數聲明的Tree-s)並為此創建一個特定的工具。
但是,擴展海灣合作委員會需要了解其相當復雜的內部代表性,並且對於不了解GCC內部人員需要一周以上的努力。
也許這樣的努力是不值得的,除非你的Qt應用程序真的很大。 如果您考慮使用MELT,我很樂意為您提供幫助。
我在我的代碼中使用過這樣的東西:
#define CONNECT_OR_DIE(source, signal, receiver, slot,connection_type) \
if(!connect(source, signal, receiver, slot,connection_type)) \
qt_assert_x(Q_FUNC_INFO, "CONNECT failed!!", __FILE__, __LINE__);
我使用它而不是簡單的connect()調用。 它對你有幫助嗎?
為了使用大型Qt4代碼庫,我為clang靜態分析器編寫了這樣的檢查器作為插件
見: http : //reviews.llvm.org/D14592
測試范圍的例子:
connect(&send, SIGNAL(f2(int, double*)), &recv, SLOT(bugaga(int, double*))); // expected-warning{{Can not find such slot}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.