我有具有此定义的模板并这样称呼它。
// instantiation
template class MyClass<Object*>;
template<typename T>
void MyClass<T>::Update(const T)
{
...
}
// Calling
MyClass foo;
const Object* objPtr;
foo.Update(objPtr);
我收到错误:“无法使用
Object *
类型的左值初始化 const Object *
类型的参数”。我正在使用 Clangd
既然
T=Object*
为什么const T
不等于const Object *
?
我认为它已经解决了Object* const
我该如何制作它,使其具有所需的功能,使其指向的对象保持不变,并且我不想将实例化更改为 const Object *
问题是
const T
中的常量是顶级。这意味着对于 T= Object*
,我们将得到 const T
为 Object *const
。
现在,
objPtr
的类型是const Object*
,它有一个低级常量。本质上,您试图将具有低级 const 的参数传递给具有顶级 const 的参数,这是不允许的。