如何解决如何使用模板和 const 关键字处理指向类型?
- 大小为 9 的数组,假设类型为 const int *
我希望它将它作为对象构造的参数传递,如下所示:
const int * myArray[9];
//filling array;
ObectType<int*> myObject(&myArray[0]);
这里有对象构造函数:
template<class T>
class ObjectType
{
public:
ObjectType(const T * myArray) : myArrayMember(myArray) {};
const T * myArrayMember;
}
但我收到以下错误:
error: invalid conversion from ‘const int**’ to ‘int* const*’ [-fpermissive]
86 | ObectType<int*> myObject(&myArray[0]);
| ^~~~~~~~
| |
| const int**
不应该将 const T * 替换为 const int** 吗? 我尽量保持简单,真正的代码更复杂。如果您需要一些信息,请告诉我。
解决方法
当您创建 myObject
时,您将使用参数 T
指定模板参数 int*
。当代入构造函数参数 T const *
时,得到 int * const *
,这是不正确的。
您需要 T
为 int const *
,并且您需要提供正确的模板参数:
ObjectType<int const *> myObject(&myArray[0]);
或者从 C++17 中,你可以让它推导出来:
ObjectType myObject(&myArray[0]);
正如在 comment by StoryTeller-UnslanderMonica 中提到的,值得指出的是,这个答案中的解释似乎很明显,因为我选择使用“east const”表示法,出于多种原因,我发现它更可取。您可以阅读此Q&A了解更多详情。
在这种情况下,这种表示法的好处是更容易理解模板参数替换的工作原理,并且正确的替换变得更加明显。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。