Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在编写模板函数时使用类型别名_C++ - Fatal编程技术网

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;
}