crtp

    21熱度

    4回答

    考慮以下標準CRTP例如: #include <iostream> template<class Derived> struct Base { void f() { static_cast<Derived *>(this)->f(); } void g() { static_cast<Derived *>(this)->g(); } }; struct Foo :

    1熱度

    1回答

    我的嘗試是: template<typename Derived> struct Base { void A() { ((Derived *)this)->B<42>(); } }; struct Derived : Base<Derived> { template<int> void B() { } }; (http://co

    0熱度

    1回答

    我有一個由幾個「水平」的元素組成的應用程序。有些元素是0..N子元素的父元素,它們本身是0..N其他元素的父元素。頂級類型沒有父級,底級元素沒有子級。換句話說,讓三種類型:A,B和C.A的一個實例是B的多個實例的父親,它們本身是C的多個實例的父親。每個實例也有一個(強類型的)參考其父母。 我有幾個父類中的方法是一樣的,比如AddChild,RemoveChild,GetChildIndex等。我想

    0熱度

    1回答

    我目前正在將數據存儲庫集成到我的應用程序中。我需要能夠爲我的單元測試嘲笑這個數據存儲(這是I/O密集型),因此創建了該庫接口的包裝。 不幸的是,在它的接口中,這個庫將迭代器作爲指針而不是值返回,因爲它們在運行時是多態的。 我的問題是,由於多態性我加入的層,似乎不可避免地添加是多態運行時的迭代器,因此招致間接的一個新的水平和一些動態分配... // Library code class LibIt

    1熱度

    1回答

    我正在嘗試使用模板,訪問者模式和CRTPs的幫助編寫郵件系統。我理解這些概念,但仍然處於這種情況下,我必須回顧一種「迷失」類型。我有一個Base班,我想找到一個Derived<T>。這是推斷「兩種」的類型,即使它被認爲是一種類型,任何東西都可以是T。 我試圖利用第二個訪客模式,這看起來很沉重而且很瘋狂,但我沒有找到任何工作解決方案。即使它與遊戲有關,它只是一個例子,它可以應用於其他程序,我想,我不

    3熱度

    2回答

    長時間以來,我一直在考慮解決我的問題,而當我沒有其他想法時,我終於明白了,只是在此問一問。 我有以下問題。 簡短版本。如何從基類繼承靜態字段,但在每個派生類中使其唯一,並保留將這些類轉發到父類的可能性? 長版。我需要爲一組類創建一些基本接口。每個類都需要有一個靜態字段和一個靜態方法。但我希望能夠將所有這些類作爲參數傳遞給一個使用這些靜態成員的通用函數。所以我在考慮從一個基類繼承它們。 但我當然不能

    0熱度

    3回答

    這裏是我的代碼,在這裏你看到的類型爲Base的對象具有接口函數Do(),我總是使用類型爲Base的對象(使用更多類型的模板)並始終調用Do()接口。因此,對於ImplBaseDummy1和ImplBaseDummy2,在ImplBaseDummy1的情況下,我得到f()的具體實現ImplBaseDummy2或Base的默認實現。到目前爲止,所有這些工作都很好,我有很多代碼可以按預期工作,我不想更改

    0熱度

    1回答

    我試圖理解爲什麼下面的代碼不會編譯: template <class Derived> struct Base { const std::set<typename Derived::Foo> types() const { return theSet; } std::set<typename Derived::Foo> theSet; }; struct Derived

    3熱度

    1回答

    我正在嘗試使用4 1/2移動語義的規則,並使用CRTP從進程中刪除重複項。這被證明是困難的,因爲儘管編譯,當我嘗試在使用賦值運算符後訪問派生類的成員時,下面的代碼最終會導致segfaulting。爲什麼會發生這種情況,有沒有辦法解決這個問題? 基地CRTP類 // BaseCRTP.h template<class Derived> class BaseCRTP { public:

    8熱度

    3回答

    我正試圖圍繞CRTP包裹我的頭。有一些很好的資源,包括這個論壇,但我認爲我對靜態多態的基礎知識有些困惑。看着下面的維基百科條目: template <class T> struct Base { void implementation() { // ... static_cast<T*>(this)->implementation();