std-function

    1熱度

    3回答

    在下面的代碼中,我有一個名爲data的變量。它內部包含一個函數來稍後調用它們。假設data在另一個庫中定義,我無法更改其類型。我爲其中每個已知函數的一部分(s3)的成員分配模板函數,並且在調用函數時必須給出一部分函數(true)。我能不能通過這樣的事情: data[0]=test_func(?,s3); // error 相反,我要傳遞一個lambda函數給它: data[0]=[](bool

    0熱度

    2回答

    以下代碼給出了分段錯誤。調試完成後,我發現問題可以通過將lambda聲明爲auto而不是Function來解決。爲什麼會這樣? #include <functional> #include <iostream> #include <vector> typedef std::vector<double> Vec; typedef std::function<const Vec&(Vec)>

    -1熱度

    2回答

    好吧,我已經有這個作爲一個工作的例子,但我只是想清理它。 目前我有一個訂閱風格的事件系統與回調例程。 我在將常規函數和類成員函數添加到存儲變量中沒有問題。 但id喜歡通過重載我的Event.subscribe方法來清理它。 目前,它做一些事情,像這樣: template <class T> class EventObject { public: void subscribe(con

    -1熱度

    3回答

    我看到了它的源代碼(MAC的XCode,/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional)是 template<class R, class... ArgTypes> clas

    0熱度

    1回答

    我想創建一個模板類,它將反過來生成一個函數的包裝。該類將隨後返回包裝。我想用模板具有將與任何功能的工作與不同的簽名,如普通類: std::function<void()>task = std::bind(fun1, param1, param2); std::function<int(int, int)>task = std::bind(fun2, param1, param2); 我想有這樣的事

    4熱度

    1回答

    #include <functional> #include <map> #include <string> #include <iostream> class X { public: X() { std::cout << "Ctor\n"; } private: typedef std::map<std::string, st

    2熱度

    1回答

    我目前正在探索C++ 17的補充。在playing around withstd::variant之後,也想用std::optional,同樣的例子。目前看到的是,編譯失敗,因爲以下錯誤: error: no viable conversion from returned value of type '(lambda at ./html_parser.hpp:53:9)' to fun

    4熱度

    1回答

    我想要一些可以接受任何可調用對象的代碼,並且我不想在頭文件中公開實現。 我不想在堆或免費存儲上冒險分配內存(投擲的風險和性能受到影響,或者我在代碼中無法訪問堆)。 沒有價值語義可能已經足夠了:通常在當前範圍結束之前完成調用。但是價值語義可能是有用的,如果不是太昂貴的話。 我該怎麼辦? 現有的解決方案有問題。 std::function分配並具有值語義,並且原始函數指針缺乏傳輸狀態的能力。傳遞一個C

    0熱度

    1回答

    我有以下: 類B偵聽C類的boost::signal2並且當觸發將執行由A類已知回調並且在類執行的方法A A,B和C,D都是std::shared_ptr。 問題是,當類D釋放指向類B的指針時,由於信號處理程序,B未被刪除。即使我呼籲在boost::connection斷開連接,我也有同樣的問題。 任何想法如何解決這個問題?

    0熱度

    1回答

    我需要將一個參數綁定到類成員函數。 事情是這樣的: #include <functional> #include <iostream> struct test { void func(int a, int b) { std::cout << a << " " << b << std::endl; } }; int main(int argc,