2014-09-24 69 views
0

我已經開發出通用的隊列中,但我failling中,將內容的隊列的不同的實施方式的包裝物(鏈表,固定堆棧) 對於。原因我需要使用可變參數模板,以捕捉不同的列表是建立在不同的參數 這裏是一個示例代碼,是不是執行(未完成):C++ 11包膨脹參數assingmentý會員專區初始化錯誤編譯

template<typename containner,typename ... Arg> 
struct GenericMultiType 
{}; 
template<template<typename ...> class containner, typename ... Arg> 
struct GenericMultiType<containner<Arg ...>, Arg ... > 
{ 
    GenericMultiType(const Arg & ... aValue):Value(aValue) ... 
    {} 
    void getValue(Arg & ... aValue) 
    { 
     aValue=Value; 
    } 
    Arg ... Value ; 
    containner<Arg ...> Containner; 
}; 




int main() 
{ 
} 

,這是編譯出來錯誤:

error: expected unqualified-id before '...' token 
    Arg ... Value ; 
     ^
main.cpp: In constructor 'GenericMultiType<containner<Arg ...>, Arg ...>::GenericMultiType(const Arg& ...)': 
main.cpp:105:47: error: class 'GenericMultiType<containner<Arg ...>, Arg ...>' does not have any field named 'Value' 
    GenericMultiType(const Arg & ... aValue):Value(aValue) ... 
              ^
+0

您不能在那裏進行包擴展。請改用'std :: tuple'。 – 2014-09-24 03:35:06

回答

1

Arg ...是一個包擴展,並不構成一個類型。你在找什麼是std::tuple<Arg...>。所以,你會讓你的Value適當的元組。以下是修改的代碼:

template<typename containner,typename ... Arg> 
struct GenericMultiType 
{}; 
template<template<typename ...> class containner, typename ... Arg> 
struct GenericMultiType<containner<Arg ...>, Arg ... > 
{ 
    using value_type = typename std::tuple<Arg...>; 
    GenericMultiType(Arg&& ... aValue): Value(std::make_tuple(std::forward<Arg>(aValue)...) 
    {} 
    void getValue(value_type& aValue) 
    { 
     aValue=Value; 
    } 
    value_type Value ; 
    containner<Arg ...> Containner; 
}; 
+0

thx!該解決方案。此外,我收到了評論,這可以做基本模板的部分專業化。這個評論是真的嗎? thx提前 – 2014-09-28 01:44:35