crtp

    6熱度

    1回答

    我有一個層次結構的操作和(共享)信息類,直觀地看起來好像不需要運行時多態性,但是如果沒有它,我無法找到解決方案。 爲了這個問題,假設有一個2級的層次結構。有一個基本操作和派生操作。來自同一級別的層次結構的對象可能需要在它們之間共享信息(這意味着基礎操作對象需要共享基礎信息,並且派生操作對象需要共享派生信息,但基礎操作對象永遠不需要共享派生信息或副作用反之亦然)。 所以它開始像這樣: // Shar

    0熱度

    1回答

    我試圖修改我的線性代數模塊以避免虛擬的vtable事情..嘗試使用CRTP和表達式模板。 我用一些基本的東西去測試整個事情,但我無法得到它的工作。 我有4個班,說: 基礎CRTP類,這裏Mathbase template <typename Derived> class Mathbase { public: using T = typename dense_traits<Derived>:

    1熱度

    2回答

    我試圖在固定大小的緩衝區中創建一條消息,其中我的庫的用戶提供了其中的一些數據。我曾經這樣做是通過給用戶一個指向緩衝區的指針並讓它們寫入它,並通過引用他們寫入的字節數來設置參數size_t。我想擺脫這種方式,因爲它允許用戶意外地破壞緩衝區,或者錯誤地報告寫入的字節數。爲了做到這一點,我做了以下內容: 定義這個結構: template <class Derived> struct MsgBase

    0熱度

    2回答

    我目前正在使用C++模板搞亂CRTP模式。在用visual studio擺弄時,我發現了派生類可以調用函數的基類實現的幾種方式/方法。下面是我正在使用的代碼,還有3條註釋掉的行顯示瞭如何從派生類調用函數的基類實現。使用一種方法比另一種方法有好處嗎?有什麼區別嗎?什麼是最常用的方法? template<typename T> struct ConsoleApplication { C

    1熱度

    2回答

    我有以下典型的場景,其中我想隱藏在子類實現的細節,並通過接口將其暴露: template <typename Derived> class Interface { public: void a() { static_cast<Derived*>(this)->_a(); } }; class Implementation : public In

    1熱度

    1回答

    假設我有使用傳統的繼承下面簡單的類層次結構: struct A_classic {}; struct B_classic : A_classic {}; 我想實現一個轉換操作符從A_classic到B_classic。要重用的代碼量可能,我做 A_classic a; // Given as input argument B_classic b; static_cast<A_classi

    9熱度

    3回答

    我想將CRTP pattern與某些鎖定機制結合使用以在多線程環境中進行訪問同步。 我的代碼如下所示: //-- CRTP base class with some sync/lock mechanism template<typename T, typename SYNC> struct Base { static std::unordered_map<int, std::stri

    1熱度

    1回答

    我的目標是創建一個基類,以及一個包含static vector的CRTP子類,它將爲每個Derived類保存不同的值。但是派生類中的每個對象必須只能看到整個類的一個vector。此外,我需要通過一個通用接口來操縱這個vector,這就是爲什麼我要設置一個Base類。 Base類和基層 class Seq { public: virtual unsigned long int elem(

    2熱度

    1回答

    我開始研究CRTP成語,我注意到GCC有一個fdevirtualize標誌,它應該允許在可能的vtable調用轉換爲直接調用時進行轉換。雖然CRTP可以與任何(C++兼容)編譯器一起使用,但是如果我只想使用gcc進行開發,是否可以避免使用CRTP習慣用法離開gcc進行虛擬化過程,或者在可能的情況下最好使用它,以便使用靜態多態性以避免虛函數調用?

    2熱度

    0回答

    這個問題是針對C++ 03而不是C++ 11的。 我有一種情況,我正在使用具有多重繼承的CRTP,並且我很想知道是否有辦法刪除在指定下面的B類型時創建的冗餘。 #include "boost/typeof/typeof.hpp" #include "boost/units/detail/utility.hpp" #include <iostream> #include <string>