指向访问其 () 运算符的类的指针的声明类型

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)

前一种方法有什么问题?

son*_*yao 5

decltype(arr)产生arr, 即的类型CT<double>,然后decltype(arr) *产生类型CT<double> *,它是一个指针CT<double>,你不能operator()直接调用它。

您可以取消引用它,然后调用operator()like (*alias)(0,0)