crtp

    4熱度

    1回答

    使用內部類或使用CRTP的枚舉有沒有可能?防爆。 template<typename Container> struct ContainerBase { std::map<typename Container::Enum, int> _; }; struct ConcreteContainer : ContainerBase<ConcreteContainer> {

    1熱度

    2回答

    我有作爲派生類的基類的類模板。這個想法是通過CRTP技巧來利用「靜態多態」。 #include <iostream> template <typename T> class BASE { public: void write() {static_cast<T*>(this)->write(); } }; class DER1 : public BASE<DER1>

    3熱度

    3回答

    我有一組非常不同的類型,我希望將實例存儲在單個集合中,特別是地圖。爲此,我使用類型擦除成語,即。我從該模板,類型特定類繼承的非模板基類: struct concept { virtual std::unique_ptr<concept> copy() = 0; // example member function }; template <typename T> struct

    0熱度

    1回答

    如果我有一個模板基類,需要派生類的類型,是安全的,這個基類的這個指針轉換爲派生類的類型? 考慮這個代碼,其中基類A將此指針轉換爲模板參數(Derived)。它還檢查提供的類型是否實際上是從這個類派生的。它顯然有效(在這裏),但是它有很好的定義? #include <iostream> class D; template<typename Derived, typename T> clas

    0熱度

    1回答

    當我看到使用CRTP圖案,看來稱爲在基本類型的功能名總是指向不同的名稱的實現函數在派生類型(例如:foo()在鹼品牌呼叫static_cast<DerivedType*>(this)->foo_implementation();。 有沒有辦法使用相同的函數名稱來實現CRTP模式?我有一個更長的繼承鏈,其中函數可能沒有在鏈的第一級具體實現,所以必須使用不同的函數名不是很乾淨/可讀 我想有像下面這樣:

    0熱度

    1回答

    在這個關於Curiously Recurring Template Patten的網頁中,可以在堆棧上實例化派生類(Object Counter示例,其中基類模板具有受保護的析構函數):CRTP-wiki ..我編譯了自己。 template <typename T> struct counter { static int objects_created; static i

    2熱度

    1回答

    我有一個CRTP模板類在這裏: template <typename S> class Base { public: constexpr static S NOT_SET{0}; }; struct Derived : public Base<Derived> { }; 鏘(5.0.0)不接受這一點: 5 : <source>:5:24: error: con

    4熱度

    2回答

    我正在嘗試使用自動差異庫Adept,並且使它與gcc 4.9.0和icc 16.0.2一起工作,但是VS 2017和Clang 4.0.1失敗 我已經將問題簡化爲以下代碼片段,並且在解決庫創建者的問題時,爲了知識的緣故,我想知道爲什麼這段代碼在兩個提到的編譯器中工作並失敗建立在另外兩個。 template <typename A> struct Expression { static

    2熱度

    1回答

    我正在嘗試實現CRTP類的層次結構。我對基類能夠訪問一個派生類向下該鏈的數據成員: #include <iostream> template <class Derived> class A { public: void showv() { std::cout << static_cast<const Derived*>(this)->v << std::endl;

    1熱度

    1回答

    我相信這是一個奇怪的循環模板模式的例子。在我看來,這應該編譯,但事實並非如此。這是在Xcode 8.3中的Clang。 template<class T> class Fungeable { public: virtual ~Fungeable() {} virtual bool funge(const Fungeable<T>& inFungeable) const =