考虑一下这个
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
是有效的。
发布于 2018-07-28 03:05:24
不,这种方法是行不通的。参数specimen
已经衰减为指针类型(甚至可能一直是指针类型);std::is_array
使用的元编程技术不会以某种方式回溯到调用者。
此外,您正在(无意中?)测试T
而不是T*
-但是更改为后者将不起作用。
发布于 2018-07-28 19:33:38
你不能改变函数的要求很奇怪/不合理。
如果无法更改函数签名,则无法检测参数是如何生成的(从ptr或数组),因为该信息已丢失。
https://stackoverflow.com/questions/51564063
复制相似问题