![](/img/trans.png)
[英]CRTP vs. virtual function as an interface or mixin
我想知道如果我從不從基 class 調用 function(即虛擬調度),那么使用 CRTP 是否比虛擬 function 多態性有任何好處? 這是示例代碼。 反匯編可以在https://godbolt.org/z/WYKaG5bbG找到。struct Mixin { virtual void ...
[英]CRTP vs. virtual function as an interface or mixin
我想知道如果我從不從基 class 調用 function(即虛擬調度),那么使用 CRTP 是否比虛擬 function 多態性有任何好處? 這是示例代碼。 反匯編可以在https://godbolt.org/z/WYKaG5bbG找到。struct Mixin { virtual void ...
[英]A problem with CRTP, containers and pointers
我有這個CRTP基地 class : 現在,一個數組,試圖成為該容器的孩子: 這是用法: 結果: 好吧,我剛拿到 UB! 可以肯定的是,我誤解了一些事情,但我無法理解我在寫什么和做錯了什么。 我希望能夠將Container用作類型定義、函數參數中的接口類型......沒有動態多態性的典型地方,只需使 ...
[英]Undefined function error when calling a static constexpr function with CRTP
我試圖了解此示例中我的 CRTP 實現出現編譯錯誤的原因: 具體為什么 (A) 可以,而 (B) 給我這個錯誤: 將 (B) 替換為return impl_func() + 4編譯成功。 但是Derived::func()和Default<Derived>::func()都不起作用。 如 ...
[英]Is CRTP in C++ a way to express what in other languages are traits and/or ADT?
所以,我正在努力掌握 C++ 中的整個 CRTP。 我在網上找到的一些(1) (2)基本原理關於您為什么要關心使用它是因為它允許以半自動方式向您的代碼添加功能。 我的意思是我可以讓編譯器為我推斷出一些功能,只要求我提供一些小的實現。 例如,我可能想形式化Comparable “特征”(使用 Rus ...
[英]Concept-ed vs CRTP static/compile-time polymorphism - using base class methods and variables from derived class
我一直在學習 c++20 概念作為 static 多態性 CRTP 模板設計的替代方案(對於那些不知道我在說什么的人,這里有一個很好的資源: https://www.fluentcpp.com /2020/09/11/replacing-crtp-static-polymorphism-with-c ...
[英]How to inherit using declarations from base class
我在 class Config中聲明類型,將其傳遞給 class Parent基類,以便Child可以訪問。 這個想法是每個Child (有很多)不必繼續聲明它自己的using聲明,因為它們已經在Parent中。 但是,這不會編譯。 Child看不到Parent::Type 。 有可能以某種方式實 ...
[英]Template a member variable in a class
我正在對一些較舊/雜亂的代碼進行一些重構。 我正在嘗試一點一點地改進。 因為它適合這個項目,我開始在一些 class 上實現 CRTP(對於 static 多態性),我們稱之為sensor 。 通過 CRTP,現在有一個real和一個fake的實現。 現在,我正在嘗試將模板放入使用sensor的 c ...
[英]how to avoid CRTP "error: invalid use of incomplete type" for classes with all public static methods?
目標是幾個范圍內的枚舉(每個枚舉在它自己的結構/類/命名空間中)和一些相關的實用函數。 我已經多次使用該模式,並且實用程序函數總是包含一個 toString() 和 fromString() function 用於人類可理解的輸入/輸出。 但是,這次我有幾種不同類型的維度:長度、時間、角度……我想 ...
[英]Call a derived class' (non-virtual) function in the base class' Destructor
假設我們有以下 class 模板:template<typename T> class Object { public: Object() = default; Object(const Object&) = delete; Object(Object& ...
[英]reduce unnecessary operator overloading in C++
在我重載< , == , + , - , * ... 在名為Fraction的 class 中: 我可以使用上面的這些“基本”運算符來重載> , += , ++和+從左... 但是,我也有像RealNumber , Complex ... 他們也需要重載,但只有重載< , == , ...
[英]How to handle multiple inheritance of same methods or diamond problem with CRTP static polymorphism?
我想用 CRTP 靜態實現多態性。 我想創建幾個提供功能的基類。 然而,功能可以重疊。 但是,如果它們重疊,它們是相同的。 假設我有 Boxer和Chess Player都提供walk 。 walk的兩個定義是相同的。 順便說一句,我可以(並且可能我應該)重寫上面的代碼以避免重復walk的代碼 ...
[英]Is there a way to decrease the size of the object by removing "vptr"
我有一個使用 CRTP 和 C++20 的代碼: 有沒有辦法刪除“vptr”,所以 object 不會占用 8 個字節(對於 x64),而只會占用 1 個字節? (因為它從未與運行時多態一起使用) 在實際代碼中,層次結構要復雜得多,它具有事件 2 vptr(因此需要 16 個字節)。 是否有類似 ...
[英]Why c++ static member was not initialized in this case?
使用 CRTP 在 C++ 中獲取新實例。 但是失敗了。 因為沒有調用registerT並且該函數沒有在映射中注冊。 我沒有任何線索。 這是代碼。 //工廠.h //base.h //導出.h //導出.cpp //main.cpp 使用g++ -o mian ./m ...
[英]What is the best way to create a 'using' declaration involving members of incomplete types?
我有一個非常簡單的 CRTP 骨架結構,它在基類中只包含一個向量和一個私有訪問器。 CRTP 類中有一個輔助方法可以訪問它。 到目前為止,一切都很好。 現在我想向CRTPType添加一個using聲明,這將是_v()返回的類型。 因此,理想情況下,可以執行以下操作: 問題是類型不完整,所以 ...
[英]CRTP and Incomplete Types
我想簡要說明一下完整類型與 CRTP 的關系。 我認為這個問題有點相關。 但是,我的問題與 CRTP 有關,其中派生類成員函數顯式調用基類成員函數,而基類成員函數又調用派生函數。 這似乎與在主例程中調用派生類型的基類函數不同。 我還閱讀了這個問題,其中解釋了使用派生類的基類的static cons ...
[英]Base singleton class with reset option
我正在嘗試在用戶不持有實例的單線程環境中使用 CRTP 實現基礎 class singleton,代碼如下: 我可以使用 class 作為伙伴: Q1 。 請問這樣可以嗎? (請參閱上面的限制。我知道這在多線程環境中不起作用,並且如果實例被持有)。 Q2 。 這樣做時出現錯誤: 請你幫助我好嗎 ...
[英]Virtual function with non-shared method
我正在進行個人項目,我需要做一些不尋常的事情。 我的代碼有點長,但問題出在結構上,所以我將使用該問題的一個非常簡化的版本。 我有兩個類(A 和 B),B 派生自 A。 B 使用 A 的所有屬性和方法,包括創建 class 實例的修改克隆的方法。 問題是我需要能夠在克隆后使用 A 中不存在的 B ...
[英]CRTP base private constructor and derived friend class cause compilation error using C++17 and uniform initialization
我有以下代碼: 出於某種原因,當使用 C++17 時,編譯因“x”變量的“不可編譯”初始化而失敗。 編譯器說: Base::Base() [with T = Derived]' 在此上下文中是私有的但如您所見,下面我創建了一個相同類型的 object,但這次我沒有使用統一初始化。 x1 變量可以 ...
[英]c++ - valid use of CRTP std::variant with two elements, but no more
我正在嘗試將 CRTP 與 std::variant 一起使用來實現經典Expression class,例如在某些代數數據類型中data Expr = Num Int | Add Expr Expr | Sub Expr Expr ... 我使用 CRTP 來避免虛 ...
[英]Strange behavior in std::make_pair call with CRTP class
問題我有一個簡單的 CRTP 模式 class BaseInterface和兩個派生自這個 class 的類: test_dint和test_dint2 。 test_dint和test_dint2之間的區別 - 在test_dint dtor 中明確聲明為~test_dint() = defau ...