关于转换运算符和 operator()
About conversion operator and operator()
在下面的代码中:
template <class T> class mval {
protected:
T max;
public:
template <class iter> mval (iter begin, iter end):max(*begin) {
while(begin != end) {
(*this)(*begin);
++begin;
}
}
void operator()(const T &t) {
if (t > max)
max = t;
}
void print() {
cout << max;
}
};
int main() {
int arr[3] = { 10,20,5 };
(mval<int>(arr, arr + 3)).print();
}
为什么 (*this)(*begin);
会导致 operator()
?
难道只有当你有类似 mval x; x(T);
的东西时,它才应该交给这个操作员吗?但它的行为就像一个转换运算符,怎么样?
mval x; x(T);
与 (*this)(*begin);
有何不同?在这两种情况下,我都看到一个 mval
类型的对象,后跟一个括号,里面有一个参数。你期望发生什么? (*this)
不是类型,它是类型 mval
的左值,所以我也不明白它是如何 "behaves like it's a conversion operator"。
在下面的代码中:
template <class T> class mval {
protected:
T max;
public:
template <class iter> mval (iter begin, iter end):max(*begin) {
while(begin != end) {
(*this)(*begin);
++begin;
}
}
void operator()(const T &t) {
if (t > max)
max = t;
}
void print() {
cout << max;
}
};
int main() {
int arr[3] = { 10,20,5 };
(mval<int>(arr, arr + 3)).print();
}
为什么 (*this)(*begin);
会导致 operator()
?
难道只有当你有类似 mval x; x(T);
的东西时,它才应该交给这个操作员吗?但它的行为就像一个转换运算符,怎么样?
mval x; x(T);
与 (*this)(*begin);
有何不同?在这两种情况下,我都看到一个 mval
类型的对象,后跟一个括号,里面有一个参数。你期望发生什么? (*this)
不是类型,它是类型 mval
的左值,所以我也不明白它是如何 "behaves like it's a conversion operator"。