Mic*_*hal 3 c++ templates auto c++11 c++17
下面的代码无法编译:
template<typename... Ts>
void CreateArr(const Ts&... args)
{
auto arr[sizeof...(args) + 1]{ args... };
}
int main()
{
CreateArr(1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)
由于以下错误:
'arr':在直接列表初始化上下文中, for 的类型'auto [6]'只能从单个初始化表达式推导auto [6]':数组的元素类型不能包含'auto''const int'为'std::initializer_list<int>'我的问题是:
为什么我不能使用auto来定义数组的类型?
如何正确定义它以与模板一起使用?
为什么我不能使用
auto来定义数组的类型?
出于同样的原因,以下行为无效/不允许!
auto ele[]{ 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
更多阅读:为什么我不能创建自动变量数组?
如何正确定义它以与模板一起使用?
使用std::common_type_t来指定类型
#include <type_traits> // std::common_type_t
template<typename... Ts>
void CreateArr(const Ts&... args)
{
std::common_type_t<Ts...> arr[sizeof...(args)]{ args... };
static_assert(std::is_array_v<int[sizeof...(args)]>, "is not array!");
}
Run Code Online (Sandbox Code Playgroud)
(参见现场演示)