perfect-forwarding

    1熱度

    2回答

    我想知道是否可以在類型上使用某些約束來進行轉發,以便可以自動執行重載。例如,假設我有以下基本函數: int f(A a, B b) { return g(a) + h(b); } 其中A和B是包含所有適當的複製和移動構造函數的類,和g和h是函數的每一個具有兩個重載:int g(const A&),int g(A&&) ,和h一樣。通常的方式轉發a和b在f將 template <t

    2熱度

    2回答

    我聽不太懂幾個關於完美轉發選項點由香草薩特在他的介紹提出"Back to the Basics! Essentials of Modern C++ Style"(@ 1:15:00)在CppCon 2014 三個相關的幻燈片(here are the slides online )有以下幾種: 我認爲在選項#4中的模板的成員函數應啓用如果腐朽類型的String相同std::string而不是不同幻

    1熱度

    1回答

    我的編碼函數類似於衆所周知的tuple_apply,它們將函數的右值引用作爲參數。 在網絡上我的研究,我碰到以下兩種呼叫: template < typename Func, /* stuff */ > void myfunction(Func && func, /* stuff */) { std::forward<Func>(func)(/* stuff *

    4熱度

    1回答

    據我所知, std::bind完全向前既它包裝可調用對象和參數到該調用對象; std::bind返回對象本身是可移動和/或可複製的,這取決於可調用對象及其參數是可移動和/或可複製的; a std::bind返回對象可能是嵌套的,在這種情況下,外部返回對象是可移動和/或可複製的,就像綁定其他可調用對象時一樣。 因此,我期望下面的代碼片段編譯好。相反,代碼會在main()的最後兩條語句中生成編譯器錯誤

    0熱度

    1回答

    假設我有幾種類型綁定到一個變體中。 在另一邊,我有一些以前的類型可以從推測的枚舉,這樣我就可以有一個運行時的僞工廠: #include <boost/variant.hpp> enum class Type { W, X, Y, Z }; struct A {}; struct B { B(int) {} }; struct C { C(int, int)

    6熱度

    3回答

    據我所知,std::forward<T>(x)相當於static_cast<T&&>(x)。 但是從我所看到的,static_cast<T>(x)似乎做同樣的事情,因爲可以在下面的code 我的問題可以看出因此也是爲什麼std::forward<T>作爲static_cast<T&&>(x)實現的,而不是static_cast<T>(x),如果兩者都具有相同的影響?

    1熱度

    1回答

    我試圖將packaged_task包裝在泛型類中,但無法用泛型函數初始化它。我已經得到它爲特定的工作,但我希望它更抽象。只是一個fyi,如果你取消註釋了我註釋掉的兩行代碼,代碼運行良好。我的猜測是,我試圖錯誤地使用模板參數。 編輯:做了一些補充,以便實際工作,但同樣的問題仍然存在。所以,如果我嘗試將一個函數傳遞給我的類的ctor,那麼當我嘗試調用ret.get()時,會出現「不良函數調用」。不過,

    5熱度

    1回答

    下面的代碼無法編譯: #include <functional> template<class ...Args> void invoke(Args&&... args) { } template<class ...Args> void bind_and_forward(Args&&... args) { auto binder = std::bind(&invoke<A

    1熱度

    1回答

    說我有下面的代碼: class Element; typedef shared_ptr<Element> ElementPtr; class Element { public: void add_child(const ElementPtr& elem); private: vector<ElementPtr> children; } inline void

    2熱度

    3回答

    我已經測試了C++ 11中的移動語義。我用移動構造函數寫了一個類。 class DefaultConstructor { public: DefaultConstructor(std::vector<int> test) : m_vec(std::forward<std::vector<int>>(test)) { }; DefaultC