构造函数和模板

时间:2015-06-16 09:43:53

标签: c++ templates constructor

我正在浏览这段代码,在那里我遇到了一段时间从主

调用此代码
#include <iostream>
#include <vector>

using namespace std;

class abc
{
public:
enum example
{
a=1,
b=2,
c=3,
d=4
};
};

template<typename T>
class xyz
{
public:
xyz(T &v,abc::example ex=abc::a):b(v),len(sizeof(T))
{
}

protected:
T &b;
int len;
};

#define Buffer_length 1024

template<typename T>
class demo
{
public:
demo(T &v):b(v)
{
length=v.size();
cout<<"length:"<<length<<endl;
typename T::size_type i=0;
for(;i<length;++i)
{
*(Buffer+i)=v[i];
}
}

protected:
typename T::size_type length;
typename T::value_type Buffer[Buffer_length];
T &b;
};

我不确定这是否是调用构造函数&#34; demo&#34;的正确方法,但是当我尝试这样的时候:

int main()
{
string str="Hello world";
xyz<string> obj1(str,abc::example::a);
demo<xyz> obj2(obj1);
}

我收到以下错误:

In function 'int main()':
58:9: error: type/value mismatch at argument 1 in template parameter list    for 'template<class T> class demo'
58:9: error:   expected a type, got 'xyz'
58:15: error: invalid type in declaration before '(' token
58:20: error: cannot convert 'xyz<std::basic_string<char> >' to 'int' in  initialization
58:11: warning: unused variable 'obj2' [-Wunused-variable]

我想知道如何调用构造函数演示。

1 个答案:

答案 0 :(得分:0)

xyz不是具体类型。您无法使用它来实例化demo

不过,

xyz<string>是具体的类型。看起来你正在尝试使用

demo<xyz<string> >