C ++模板Variadic类构造函数使用参数包但不起作用

时间:2017-04-11 07:44:36

标签: c++ variadic-templates variadic-functions

所以我面临的问题是我的数据结构类constructor允许我声明可变长度为parameters的类:

template<class T>
class Dynarray
{
    private:
        int size;
    public:
        template<class T, typename... Arguments>
        Dynarray(T item,Arguments...)
        {
            size = sizeof...(Arguments);
        }
}

但是,如果我添加额外的公共成员函数,那么我可以像这样添加更多类:

template<class T>
class Dynarray
{
    private:
        int size;
    public:
        template<class T, typename... Arguments>
        Dynarray(T item,Arguments...)
        {
            size = sizeof...(Arguments);
        }
        /////////////////////////////////////////////////////////
        template<class T, typename... Arguments>
        void Dynarray<T>::AddGroup(T item, Arguments...)
        {   //Errors C2838, C2059, C2334

            size += sizeof...(Arguments);

        }
        /////////////////////////////////////////////////////////
}

我收到错误代码:

  

C2838&#39; AddGroup&#39;:成员声明中的非法限定名称

     

C2059语法错误:&#39; {&#39;

     

C2334之前的意外令牌&#39; {&#39;跳过明显的功能体

ConstructorsMember Functions之间的类模板是否有区别?你知道任何解决方法吗?

1 个答案:

答案 0 :(得分:3)

在类定义中,您不应重复Dynarray<T>: 所以它应该是:

template<typename... Arguments>
void AddGroup(T item, Arguments...)
{
    size += sizeof...(Arguments);
}

(我还删除了该类已经存在的重复typename T。)