Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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++ 使用std::visit和可变模板结构_C++_C++17 - Fatal编程技术网

C++ 使用std::visit和可变模板结构

C++ 使用std::visit和可变模板结构,c++,c++17,C++,C++17,我试图理解下面的例子,我从中得到的 目的:学习 有人能解释一下这个重载结构是如何工作的吗?特别是我不明白的是下面的声明 template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>; template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>; 模板重载(Ts…)->重载; 这是一个(工作草案链接)。 这是最新

我试图理解下面的例子,我从中得到的

目的:学习

有人能解释一下这个重载结构是如何工作的吗?特别是我不明白的是下面的声明

template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
模板重载(Ts…)->重载;
这是一个(工作草案链接)。
这是最新版本的标准以及类模板参数引入的语言的一个特性。有关更多详细信息和更友好的解释,请参见。
这不是一个正确的解释,但是为了简单起见,您可以把它看作是一个提示,它可以引导模板参数从给构造函数的一组参数中推导出来。
作为旁注,我发现了一个非常清楚的例子,值得复制一下:

template<typename T>
struct Thingy { T t; };

Thingy(const char *) -> Thingy<std::string>;

// ...

Thingy thing{"A String"}; // thing.t is a `std::string`.
模板
struct Thingy{T;};
Thingy(const char*)->Thingy;
// ...
东西{“字符串”};//t是一个'std::string'。
信用卡是给@Nicolas的,他是这里的活跃用户。不幸的是,我找不到这个例子的答案

有人能解释一下这个重载结构是如何工作的吗?特别是我不明白的是下面的声明

template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
模板重载(Ts…)->重载;
这是一个(工作草案链接)。
这是最新版本的标准以及类模板参数引入的语言的一个特性。有关更多详细信息和更友好的解释,请参见。
这不是一个正确的解释,但是为了简单起见,您可以把它看作是一个提示,它可以引导模板参数从给构造函数的一组参数中推导出来。
作为旁注,我发现了一个非常清楚的例子,值得复制一下:

template<typename T>
struct Thingy { T t; };

Thingy(const char *) -> Thingy<std::string>;

// ...

Thingy thing{"A String"}; // thing.t is a `std::string`.
模板
struct Thingy{T;};
Thingy(const char*)->Thingy;
// ...
东西{“字符串”};//t是一个'std::string'。

信用卡是给@Nicolas的,他是这里的活跃用户。不幸的是,我找不到这个例子的答案。

@PaulVarghese不客气。这就是它的工作原理:一个人打开一个问题,另一个人会尽力回答。希望这个答案能帮助您和未来的读者。应该注意的是,
重载
是有效的,因为C++17中的聚合初始化被扩展为能够初始化基类子对象和成员。还有,是“尼可博拉斯”,不是尼可拉斯。@尼可博拉斯你说得绝对正确。是我的错。我马上就要定名字了。我可以复制并粘贴其余的评论吗?@PaulVarghese不客气。这就是它的工作原理:一个人打开一个问题,另一个人会尽力回答。希望这个答案能帮助您和未来的读者。应该注意的是,
重载
是有效的,因为C++17中的聚合初始化被扩展为能够初始化基类子对象和成员。还有,是“尼可博拉斯”,不是尼可拉斯。@尼可博拉斯你说得绝对正确。是我的错。我马上就要定名字了。我可以复制并粘贴注释的其余部分吗?可以将类似的内容添加到标准库中,作为
std::重载
,以及关于实现此功能。可以将类似的内容添加到标准库中,作为
std::重载
,以及关于实现此功能。