crtp

    1熱度

    3回答

    這是我試圖實現的簡化示例。因此,它可能看起來有點傻,但忍受着我。比方說,我有 template<int i> class Class1{ foo(){cout<<"j is divisible by i, so we will hang out"<<endl;} } ,並具有固定int j變量class2:要麼通過這樣一個int或有一個成員變量模板化。我想class2情況下只能夠調用fo

    -1熱度

    1回答

    如何編寫基類和迭代器的幾個派生類? 迭代器是否必須返回自己(* this)? 到目前爲止,我使用typename X和static_cast<X&>(*this)來允許派生類繼承一個從基類返回自身的函數。 This看起來很醜。有沒有更好的辦法? 簡化代碼: #include <iterator> #include <iostream> template <typename T, typenam

    1熱度

    1回答

    我需要用相當大的類替換代碼中的動態多態,並且我遇到了CRTP + variadic模板設計的問題。 爲了說明,我在下面提供玩具問題。 有一種動態多態類使得下列接口用於: int main() { Loop loop; Add add ; loop.set(add); loop.run(); Sub sub ; loop.set(sub);

    4熱度

    1回答

    我想要一個圍繞枚舉的包裝,它會給我機會將其轉換爲字符串,反之亦然。 基類如下: template<typename TEnum> class StringConvertedEnum { public: static std::string toString(TEnum e); static TEnum toEnum(std::string &str); protect

    6熱度

    2回答

    我很困惑如何編譯CRTP。如果我們有這樣的事情: template<class T> class Base { }; class Derived : public Base<Derived> { }; 爲什麼在編譯過程中不會出現類似這種情況? (X[Y]表示X與Y繼承) 在一個Derived實例 Derived d; d被擴展成的模板和繼承 d[Base<Derived[Bas

    3熱度

    1回答

    假設我試圖創建自己實施的boost ::文件系統::路徑,使用Curiously Recurring Template Pattern: (代碼給出不完整簡潔,但將表現出的問題,因爲所述當與 'g++ -std=c++11 -o mypath ./mypath.cpp' 編譯,使用GCC 4.8.4) mypath.hpp: #ifndef MYPATH_HPP #define MYPATH_H

    5熱度

    1回答

    我有一組實現相同的業務方法的類。由於性能原因,我計劃使用CRTP而不是虛擬調度。但是我想把編碼的便利性保留在一個帶有繼承和虛擬方法的接口上。 可以讓我的專用類同時從模板化的抽象類繼承,它將使用CRTP來保存公共代碼,並且還可以從純虛擬類繼承,以便我可以創建每種類型的實例,但具有我的客戶端代碼僅取決於接口?更好的是,如何在使用CRTP的同時爲客戶端代碼提供單一接口,同時又有多個實現?

    1熱度

    1回答

    我有一個純虛類Interface: class Interface { public: virtual ~Interface() noexcept; virtual void open()=0; virtual void close()=0; protected: explicit Interface(const string param

    4熱度

    2回答

    我最近得到了這個想法,使用CRTP(奇怪的循環模板模式)分離不同平臺的具體實現(可能是Win32/X,opengl/dx/vulkan等):我想大概是這樣: IDisplayDevice.h #pragma once #include "OSConfig.h" namespace cbn { template <class TDerived> // Win32 type her

    0熱度

    1回答

    我有一些奇怪的問題實現懶惰分配和添加,如https://eigen.tuxfamily.org/dox/TopicInsideEigenExample.html中所示。 的代碼是 template<typename Derived> class Base; template<typename Derived, typename OtherDerived> class SumOp; templ