簡體   English   中英

C ++,回調,對象和最佳實踐

[英]C++, callbacks, objects and best practice

我正在尋找解決我的問題的方法。 我找到了解決方法,但我認為應該有一種更漂亮的方法。 這是我的問題:我有一個用C編寫的IPC庫。收到消息后,它將調用回調函數。 我在這個庫上做了一個包裝器類。 收到消息后,包裝器類應觸發一個信號(我使用的是Qt yes)。 如您所知,成員函數不能是回調,因此在我的情況下,我在類外部編寫了該回調。 現在我必須從回調函數中發出信號,我知道的唯一方法是為包裝器類創建一個公共方法,該方法將發出信號,但是我不想將該方法公開,因此我不能訪問課外的受保護/私人成員。 有人有類似的問題嗎? 您是如何解決的?

謝謝

如果希望成員函數為“回調”,則可以在類中將該函數聲明為“靜態”。

您可以將外部函數聲明為該類的朋友,因此無需將該方法公開。

這里是教程的鏈接

按照評論的要求將Postet作為答案。

好吧,成員函數可以是回調,還有一些其他工作。 這就是所謂的“委托”。 您可以嘗試boost::bind / boost::mem_fn 也許其他一些庫會更方便/有用,例如boost.lambda (我沒有嘗試過)。

std :: mem_fun與Vlad指出的技巧相同。 交朋友被認為不是一個好的設計,因為您公開了所有類的內部組件,甚至都沒有給成員打電話就可以訪問。

靜態方法將無法發出單數,但是它可以訪問指向您的類的另一個靜態成員。 您可以通過這種方式創建一個特殊的“調用程序”類,並存儲指向您的Qt對象的單個靜態指針。

您可以有一個全局類指針,但是它比擁有一個朋友還要糟糕。 您可以使類成為單例,但它的權衡取舍類似於全局變量,因此不值得一用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM