构造函数咋这样定义?
template <typename T> explicit Point (const VecExpr<T> & expr) { for (int i = 0; i < D; i++) x[i] = expr(i); }
class Point{ explicit Point (const VecExpr<double> & expr) { for (int i = 0; i < D; i++) x[i] = expr(i); } explicit Point (const VecExpr<int> & expr) { for (int i = 0; i < D; i++) x[i] = expr(i); } double x[D];};
[解决办法]
如果你想限制一下,仅提供一个构造函数,则应明确写出VecExpr的模板参数类型例如
explicit Point( const VecExpr<int> expr)....
又或者你不想放弃VecExpr所提供的模板特性,那么就应该将模板声明放到类前面去:
template <class T>class Point{ explicit Point (const VecExpr<T> & expr) { for (int i = 0; i < D; i++) x[i] = expr(i); } T x[D];};
[解决办法]
这~怎么会不是构造函数呢~所谓的构造函数指的是,方法没有返回值,且其名称与类别一致的方法。可以没有参数(默认构造函数),也可以拥有多个参数,以对对象进行初始化。
所以~这确实是构造函数,只是你必须这么用:
VecExpr<int> a = {10, ...};
Point<int> p(a);
VecExpr<double> b = {....};
Point<double> p2(b);
对于上面来说,Point<int>和Point<double>是完全不相干的两个类型
[解决办法]