C++ 如何在编写模板函数时使用类型别名
我有一个模板类,如下所示C++ 如何在编写模板函数时使用类型别名,c++,C++,我有一个模板类,如下所示 template <class T> class Point { T x; T y; using value_type = T; Point() {} Point(T a, T b) { x = a; y = b; } }; 模板 类点 { tx; T y; 使用值_type=T; 点(){} 点(T a,T b) { x=a; y=b; } }; 我想写一个函数,添
template <class T>
class Point
{
T x;
T y;
using value_type = T;
Point() {}
Point(T a, T b)
{
x = a;
y = b;
}
};
模板
类点
{
tx;
T y;
使用值_type=T;
点(){}
点(T a,T b)
{
x=a;
y=b;
}
};
我想写一个函数,添加x和y值,并在类定义的类型中返回x+y。一种方法是使用模板,如下所示:
template <typename T2, template <typename> class T1>
T2 sum(T1<T2> p)
{
return p.x + p.y;
}
模板
T2和(T1 p)
{
返回p.x+p.y;
}
我想知道是否可以使用类中定义的类型别名,避免为sum函数编写模板,从而获得类似的结果?中也指出了类似的问题,但其中未讨论类型别名的使用。一种可能性是执行以下操作:
template <class T>
T sum(Point<T> p) {
return p.x + p.y;
}
模板
T总和(p点){
返回p.x+p.y;
}
你当然可以
template <typename T>
typename T::value_type sum(T p)
{
return p.x + p.y;
}
模板
类型名T::值\类型和(TP)
{
返回p.x+p.y;
}
您可以这样做,以避免让sum()
接受过于广泛的类型集:
template <typename T>
typename Point<T>::value_type sum(const Point<T>& p)
{
return p.x + p.y;
}
这并没有严格回答您关于如何使用类型别名的问题,但它可能是更好的代码,因为它不会对@BattleTested的
T
可能的重复项设置不必要的限制。尽管标题类似,但您提到的问题没有讨论使用类型别名。
template <typename T>
auto sum(const Point<T>& p)
{
return p.x + p.y;
}