[英]C++ variadic template to replace typelist
我想利用可變參數模板來替換下面的標准類型列表代碼。 另外,請注意,這使用int作為類型。 我試圖加入C ++ 11定義的強類型枚舉,所以我想用模板參數類型替換int HEAD。
template <int HEAD, class TAIL>
struct IntList {
enum { head = HEAD };
typedef TAIL tail;
};
struct IntListEnd {};
#define LIST1(a) IntList<a,IntListEnd>
#define LIST2(a,b) IntList<a,LIST1(b) >
#define LIST3(a,b,c) IntList<a,LIST2(b,c) >
#define LIST4(a,b,c,d) IntList<a,LIST3(b,c,d) >
這就是我試圖走下去的道路:
template <class T, T... Args>
struct vlist;
template <class T, T value, T... Args>
struct vlist {
T head = value;
bool hasNext() {
if (...sizeof(Args) >=0 )
return true;
}
vlist<T,Args> vlist;
vlist getNext () {
return vlist;
}
};
template <class T>
struct vlist { };
初始化這個的例子我應該類似於下面的:
enum class FishEnum { jellyfish, trout, catfish };
vlist <FishEnum, FishEnum::jellyfish, FishEnum::trout, FishEnum::catfish> myvlist;
我在論壇上搜索了一個模板結構的好例子,它可以接受類型和類型值而沒有運氣。 關於從哪里去的任何建議? 我在上面的代碼中粘貼了下面的編譯錯誤,
note: previous declaration 'template<class T, T ...Args> struct vlist' used 2 template parameters
template <class T, T... Args> struct vlist;
^
error: redeclared with 1 template parameter
struct vlist { };
^
note: previous declaration 'template<class T, T ...Args> struct vlist' used 2 template parameters
template <class T, T... Args> struct vlist;
您缺少基本模板的許多參數擴展和特化。 有一點要記住:一旦你聲明的基礎模板,所有其他模板必須是基礎的專業 :
// Base template
template <class T, T... Args>
struct vlist;
// Specialization for one value
template <typename T, T Head>
struct vlist<T, Head>
{
T head = Head;
constexpr bool has_next() const { return false; }
};
// Variadic specialization
template <class T, T Value, T... Args>
struct vlist<T, Value, Args...>
{
T head = Value;
constexpr bool has_next() const { return true; }
constexpr vlist<T, Args...> next() const
{
return vlist<T, Args...>();
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.