微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++:推导模板化函数的类型时出错

如何解决C++:推导模板化函数的类型时出错

我正在尝试在 C++ 中的模板中进行类型推导。我正在尝试使用以下代码对数组参数进行类型推导:

template <typename T,std::size_t N>
constexpr std::size_t func(T (&)[N]) {
    return N;
}

这将简单地返回输入数组的长度,就像这样:

char arr[] = "abc";
cout << func(arr) << endl; // would print 3.

但是当我修改 func代码以获得参数名称时,一切都被打破了!

template <typename T,std::size_t N>
constexpr std::size_t func(T (&)[N] arr) {
    return N;
}

我遇到的主要错误似乎是:严重性代码描述项目文件行抑制状态 错误(活动)E1097 未知属性“no_init_all” ProjectName C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winnt.h 7597

对这个问题有什么想法吗?以及如何解决

显然我不需要声明参数的名称,因为我不需要在这函数中使用它,但只是想知道为什么会弹出这个错误

解决方法

语法是

template <typename T,std::size_t N>
constexpr std::size_t func(T (&arr)[N]);

您可以使用别名来获得更自然的语法:

template <typename T,std::size_t N>
using CArray = T[N];

template <typename T,std::size_t N>
constexpr std::size_t func(CArray<T,N>& arr);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。