c++ - 如何判断指针是否是指向数组的指针?
问题描述
考虑这个
template <class T>
inline constexpr bool found_to_be_array (T* specimen)
{
if constexpr (std::is_array_v<T>) {
return true;
}
else {
return false;
};
}
问题是在什么情况下这会产生可靠的结果?
澄清:我不能改变这个功能的足迹。我没有答案,所以让我在这里发布我的发现。考虑一下:
int ia[]{ 1,2,3,4,5,6,7,8,9,0 };
int iam[3][3][3][3][3]{};
// returns false
auto is_array_1 = found_to_be_array(ia);
// returns true
auto is_array_2 = found_to_be_array(iam);
我仍在研究这个,但对于多维数组,found_to_be_array
有效。
解决方案
不,这种方法行不通。参数specimen
已经衰减为指针类型(或者它甚至可能一直是指针);使用的元编程技术std::is_array
不会以某种方式追溯到调用者。
此外,您正在测试(无意?)T
而不是T*
- 但更改为后者将不起作用。
推荐阅读
- android - 获取数据后重构我自己的 JsonArray
- java - 如何从字符串的上下文创建 java 类文件
- laravel - 如何将 onDelete('RESTRICT') 更改为 CASCADE
- javascript - 如何重定向到闪亮的动态URL?
- python - 如何阅读某些pdf文件中的所有内容,除了其中的表格?
- java - 为 SendGrid 创建 JUnit 测试
- css - 向左展开openlayer ScaleLine
- docker - 启动 Hyperledger 网络的问题
- c# - 如何在 Google Assistant 中显示来自 Dialogflow Webhook 的表格卡片
- c# - 后缀!C# 中的(感叹号)运算符