如何解决指向访问其运算符的类的指针的decltype
我正在上课
template<class T> class CT
{
T& operator()(int i,int j) const noexcept
{ return indx[i*N+j]; }
private:
T *indx;
int N;
};
现在在我的应用程序中的某些地方,我有以下内容
CT<double> arr,(...);
(...)
decltype(arr) *alias;
if(usearr)alias = &arr;
(...)
alias(0,0) = 3.0; // Compiler ERROR!
编译器抱怨我通过decltype
访问的对象类型不是函数或函数指针。
如果我在声明alias
中删除指针并将行替换为赋值过载,则可以解决问题
decltype(arr) alias;
if(usearr)alias = arr;
前一种方法有什么问题?
解决方法
decltype(arr)
产生类型arr
,即CT<double>
,然后decltype(arr) *
产生类型CT<double> *
,它是指向CT<double>
的指针并且您不能直接在其上调用operator()
。
您可以取消引用它,然后像operator()
一样调用(*alias)(0,0)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。