C++ 如何定义模板化类类型的对象?
如果我有这种结构:C++ 如何定义模板化类类型的对象?,c++,C++,如果我有这种结构: namespace A { template <Class T> struct Point { Point<T>(T x_, T y_) : x(x_), y(y_) {} Point<T>() : x(0), y(0) {} T x; T y; } } 但它不起作用。A::Point或A::Point-您需要指定要专门化的类型。否则,
namespace A
{
template <Class T>
struct Point
{
Point<T>(T x_, T y_) : x(x_), y(y_) {}
Point<T>() : x(0), y(0) {}
T x;
T y;
}
}
但它不起作用。A::Point例如,code>或A::Point代码>-您需要指定要专门化的类型。否则,编译器如何知道T
是哪种类型?A::Point例如,code>或A::Point代码>-您需要指定要专门化的类型。否则,编译器如何知道T
是哪种类型?在实例化结构时,必须指定类型,例如:
A::Point<double> point;
A::Point;
在实例化结构时,您必须指定,例如:
A::Point<double> point;
A::Point;
即:
A::Point<int> point;
A::Point<int> point(1,1);
A::Point;
A:点(1,1);
但首先修复错误(注意“class”的大小写和缺少分号):
名称空间A
{
模板
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){
点():x(0),y(0){}
tx;
T y;
};
}
即:
A::Point<int> point;
A::Point<int> point(1,1);
A::Point;
A:点(1,1);
但首先修复错误(注意“class”的大小写和缺少分号):
名称空间A
{
模板
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){
点():x(0),y(0){}
tx;
T y;
};
}
这里似乎有一些语法错误。如果将代码更正为:
namespace A
{
template <class T> // Class is lowercase
struct Point
{
Point(T x_, T y_) : x(x_), y(y_) {} // No need for <T>
Point() : x(0), y(0) {} // No need for <T>
T x;
T y;
}; // Semi colon
}
名称空间A
{
模板//类是小写的
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){}//不需要
点():x(0),y(0){}//不需要
tx;
T y;
};//分号
}
然后:
A::Point代码>
这是有效的。您需要告诉它模板参数是什么,但在这种情况下无法自动推断它。这里似乎有一些语法错误。如果将代码更正为:
namespace A
{
template <class T> // Class is lowercase
struct Point
{
Point(T x_, T y_) : x(x_), y(y_) {} // No need for <T>
Point() : x(0), y(0) {} // No need for <T>
T x;
T y;
}; // Semi colon
}
名称空间A
{
模板//类是小写的
结构点
{
点(tx_u,tyuu):x(x_u),y(y_u){}//不需要
点():x(0),y(0){}//不需要
tx;
T y;
};//分号
}
然后:
A::Point代码>
这是有效的。您需要告诉它模板参数是什么,但在这种情况下无法自动推断它。首先,您需要在结构点的定义后添加分号。要声明类型为A::Point
的实例,请执行以下操作:
A::Point;
首先,您需要在结构点的定义后添加分号。要声明类型为A::Point
的实例,请执行以下操作:
A::Point;
不要含糊其辞,做个王牌;学习编写适当的测试用例!“不起作用”不是一个错误的描述。不要含糊其辞,做一个王牌;学习编写适当的测试用例!“不起作用”不是一个错误描述。D'oh比我快了29秒!但是,在您的第一行中有一个错误的)名称空间结尾后的分号不需要Edd'oh比我快29秒!但是,在第一行中有一个错误的符号。名称空间末尾的分号不需要作为一般样式点。对于这样的使用,在ctor中使用const t&x_u,const t&y_u可能是一个好习惯。作为一般样式点,在ctor中使用const t&x_u,const t&y_u可能是一个好习惯。