A2L*_*LBK 2 c++ pointers decltype c++11
我有以下课程
template<class T> class CT
{
T& operator()(int i,int j) const noexcept
{ return indx[i*N+j]; }
private:
T *indx;
int N;
};
Run Code Online (Sandbox Code Playgroud)
现在在我的应用程序中的某些地方我有以下内容
CT<double> arr, (...);
(...)
decltype(arr) *alias;
if(usearr)alias = &arr;
(...)
alias(0,0) = 3.0; // Compiler ERROR!
Run Code Online (Sandbox Code Playgroud)
编译器抱怨我正在访问的对象类型decltype不是函数或函数指针。
如果我删除声明中的指针alias并将该行替换为赋值重载,则问题可以解决
decltype(arr) alias;
if(usearr)alias = arr;
Run Code Online (Sandbox Code Playgroud)
前一种方法有什么问题?
decltype(arr)产生arr, 即的类型CT<double>,然后decltype(arr) *产生类型CT<double> *,它是一个指针CT<double>,你不能operator()直接调用它。
您可以取消引用它,然后调用operator()like (*alias)(0,0)。