Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
第二种形式的c++;你有什么工作吗? 有两种形式的C++函数 STD:: template< class T, class... Args > std::any make_any( Args&&... args ); (1) template< class T, class U, class... Args > std::any make_any( std::initializer_list<U> il, Args&&... args ); (2) 模板 std::any make__any(Args&&…Args);(1) 模板 std::any make_any(std::initializer_list il,Args&…Args);(2)_C++_C++17 - Fatal编程技术网

第二种形式的c++;你有什么工作吗? 有两种形式的C++函数 STD:: template< class T, class... Args > std::any make_any( Args&&... args ); (1) template< class T, class U, class... Args > std::any make_any( std::initializer_list<U> il, Args&&... args ); (2) 模板 std::any make__any(Args&&…Args);(1) 模板 std::any make_any(std::initializer_list il,Args&…Args);(2)

第二种形式的c++;你有什么工作吗? 有两种形式的C++函数 STD:: template< class T, class... Args > std::any make_any( Args&&... args ); (1) template< class T, class U, class... Args > std::any make_any( std::initializer_list<U> il, Args&&... args ); (2) 模板 std::any make__any(Args&&…Args);(1) 模板 std::any make_any(std::initializer_list il,Args&…Args);(2),c++,c++17,C++,C++17,第二种形式是如何运作的?为什么不只是 template< class T, class U> std::any make_any( std::initializer_list<U> il) ? 模板 std::any make_any(std::initializer_list il)? 比如在这个声明中, std::any a = std::make_any<std::list<int>>({1,2,3}). std::any a=std:

第二种形式是如何运作的?为什么不只是

template< class T, class U>
std::any make_any( std::initializer_list<U> il) ?
模板
std::any make_any(std::initializer_list il)?
比如在这个声明中,

std::any a = std::make_any<std::list<int>>({1,2,3}).
std::any a=std::make_any({1,2,3})。

或者你能用一个初始值设定项列表和一些其他参数,比如,{1,2,3},4,5来调用它吗?这里的参数是用于构造il还是用于列表?

之所以存在第二个参数,是因为
std::initializer\u list
不能很好地使用模板参数推断。假设您自己的实现(使用
std::make_any
作为实现)不提供第二种形式

template< class T, class... Args >
std::any poor_make_any(Args&&... args)
{
    return std::make_any<T>(std::forward<Args>(args)...);
}
它只适用于

std::any x = std::make_any<Test>({1,2,3}, 42);
std::any x=std::make_any({1,2,3},42);
如果变量的第二部分不存在,你必须

std::any x = std::make_any<Test, std::initializer_list<int>, int>({1,2,3}, 42);
std::any x=std::make_any({1,2,3},42);

这显然不是非常方便。

存在第二个的原因是由于
std::initializer\u list
不能很好地使用模板参数推断。假设您自己的实现(使用
std::make_any
作为实现)不提供第二种形式

template< class T, class... Args >
std::any poor_make_any(Args&&... args)
{
    return std::make_any<T>(std::forward<Args>(args)...);
}
它只适用于

std::any x = std::make_any<Test>({1,2,3}, 42);
std::any x=std::make_any({1,2,3},42);
如果变量的第二部分不存在,你必须

std::any x = std::make_any<Test, std::initializer_list<int>, int>({1,2,3}, 42);
std::any x=std::make_any({1,2,3},42);

这显然不是非常方便。

你说得很清楚,谢谢!现在我明白了,“std::initializer_list il”只是'T'构造函数的第一个参数;而且args可以有零个或多个可遵循。顺便说一句,这是一个很好的问题。不知道否决票是从哪里来的,也许是第一个版本中缺少的格式。你说得很清楚,谢谢!现在我明白了,“std::initializer_list il”只是'T'构造函数的第一个参数;而且args可以有零个或多个可遵循。顺便说一句,这是一个很好的问题。不确定否决票是从哪里来的,可能是第一个版本中缺少的格式。