C++ C++;,模板专门化问题
我在模板类专门化方面有问题,请参阅下面的代码C++ C++;,模板专门化问题,c++,templates,specialization,C++,Templates,Specialization,我在模板类专门化方面有问题,请参阅下面的代码 template <typename T> class Point { private T x, y; typedef T Type; public: Point ( const T & x_, const T & y_) : x ( x_ ), y ( y_ ) {} }; template <typename Item&
template <typename T>
class Point
{
private
T x, y;
typedef T Type;
public:
Point ( const T & x_, const T & y_) : x ( x_ ), y ( y_ ) {}
};
template <typename Item>
struct TItems
{
typedef std::vector <Item> Type;
};
template <typename Item>
class Container
{
protected:
typename TItems <Item>::Type items;
public:
typedef Item type;
};
模板
类点
{
私有的
tx,y;
T型;
公众:
点(常数T&x_,常数T&y_):x(x_),y(y_){
};
模板
结构滴度
{
typedef std::向量类型;
};
模板
类容器
{
受保护的:
typename TItems::类型项;
公众:
类型定义项目类型;
};
是否可以专门化点的容器类
更新问题:
我尝试了以下代码,它有效吗
template <typename T>
class Container < Point <T> >
{
};
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
Container <Point <double> > points;
}
模板
类容器
{
};
int _tmain(int argc,_TCHAR*argv[]
{
返回0;
货柜站;
}
是的,您可以使用该类型的点专门化您的类
编辑:
我试过下面的代码,是吗
有效吗
如果您尝试过以下代码,您不知道它是否已编译吗?0_o
int _tmain(int argc, _TCHAR* argv[])
{
Container <Point <double> > points;
return 0; // return should be here nor program will exit before creating Container <Point <double> > points;
}
int-tmain(int-argc,_-TCHAR*argv[]
{
货柜站;
return 0;//return应该在这里,程序在创建容器点之前也不会退出;
}
可以,是的,但是你的语法不太正确。目前,编译器不知道t
是什么,因此您必须告诉它它是一个模板参数:
template<typename T>
class Container<Point<T> > { };
模板
类容器{};
谢谢,我在你发布答案的同时更正了我的代码:-)\u tmain
不是一个合法的函数名,所以它编译的事实对代码是否合法没有多大帮助。我想他正在使用visual studio。@Dennis,\u tmain
怎么不是一个合法的函数名?它是一个有效的标识符,甚至不是保留的。@Ben:在全局范围中,以下划线开头的名称是保留的。重要的是,简单地编译代码意味着准确性,但不能保证准确性。@Dennis:为实现保留,此实现指定它是一个扩展到入口点名称的宏(main
或wmain
)。