hel*_*vio 3 c++ inheritance operator-overloading
我在尝试从父结构继承函数调用操作符时遇到问题.我创建了一个简单的代码来说明我的问题:
#include <iostream>
using namespace std;
template <class T, int N>
struct array
{
T value[N];
T& operator() (int);
};
template <class T, int N>
T& array<T,N>::operator() (int i)
{ return value[i]; }
template <class T, int N>
struct matrix: public array<T,N*N>
{
T& operator() (int,int);
};
template <class T, int N>
T& matrix<T,N>::operator() (int i, int j)
{ return this->value[i*N+j]; }
int main()
{
matrix<double,100> a;
a(0) = 3.5;
cout << a(0) << endl;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
我希望'matrix'类从'array'类继承operator(),并用本地operator()重载它; 我希望这是因为参数的数量不同.但是,这段代码的编译失败了,例如"错误:不匹配调用'(矩阵)(int)'"和"注意:候选人需要2个参数,1提供".如果未在类'matrix'中定义operator(),则继承正常发生,并且代码编译并运行正常,如预期的那样.
我究竟做错了什么?我不想不必要地重新定义operator()......
名称查找在C++中的工作方式,在编译器找到名称的那一刻,它就会停止查找.换句话说,编译器首先找到operator()in matrix并停止查找,永远不会找到array.
您可以operator()使用using声明明确地将base 带入范围:
template <...>
struct matrix : public array<...> {
using array::operator();
T& operator ()(int, int);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |