Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++中实现(JSON替代),并且创建一个迭代器类来循环我的字节数组,它是基于某些标头分隔的。那么迭代器将如何构造和返回任何类型,例如vector,map等。std::any或std::variant是唯一的方法吗?(我不想使用boost)_C++_C++17 - Fatal编程技术网

返回任何/未知类型c++; 我试图在C++中实现(JSON替代),并且创建一个迭代器类来循环我的字节数组,它是基于某些标头分隔的。那么迭代器将如何构造和返回任何类型,例如vector,map等。std::any或std::variant是唯一的方法吗?(我不想使用boost)

返回任何/未知类型c++; 我试图在C++中实现(JSON替代),并且创建一个迭代器类来循环我的字节数组,它是基于某些标头分隔的。那么迭代器将如何构造和返回任何类型,例如vector,map等。std::any或std::variant是唯一的方法吗?(我不想使用boost),c++,c++17,C++,C++17,到目前为止,我的代码设计成一种静态类型的语言。因此,您试图完成的任务(让函数返回由类型确定的运行时)预计是一场斗争:)。我个人会避免这种做法 variant是一种解决方案,但它只会导致客户机在一个大的case语句中探测每个返回值的内容;或者随后从访问者模式获取回调。这两种方法都不是从解析器获取输出的最佳方法 我会看一下好的C++ JSON解析器,看看它们是如何解决序列化/反序列化的,例如< P> C++是被设计成静态类型的语言。因此,您试图完成的任务(让函数返回由类型确定的运行时)预计是一场斗争

到目前为止,我的代码设计成一种静态类型的语言。因此,您试图完成的任务(让函数返回由类型确定的运行时)预计是一场斗争:)。我个人会避免这种做法

variant是一种解决方案,但它只会导致客户机在一个大的case语句中探测每个返回值的内容;或者随后从访问者模式获取回调。这两种方法都不是从解析器获取输出的最佳方法


我会看一下好的C++ JSON解析器,看看它们是如何解决序列化/反序列化的,例如

< P> C++是被设计成静态类型的语言。因此,您试图完成的任务(让函数返回由类型确定的运行时)预计是一场斗争:)。我个人会避免这种做法

variant是一种解决方案,但它只会导致客户机在一个大的case语句中探测每个返回值的内容;或者随后从访问者模式获取回调。这两种方法都不是从解析器获取输出的最佳方法


我会看一看好的C++ JSON解析器,看看它们是如何解决序列化/反序列化的,例如

< P>,对于你想做的事情,有不同的方法,每个方法都有它自己的要求和缺点。 解决方案1:用户在编译时知道序列化数据的样子 只需编写一个接受类型的模板函数,然后尝试对其进行反序列化。检查二进制blob的运行时类型信息,如果类型不匹配,则引发异常

解决方案2:用户知道可能的类型集,std::variant方法: 利用访问者模式。您可以查看variant的界面了解详细信息

解决方案3:用户不知道将出现什么类型:
你在这里真倒霉。你需要做一些像std::any这样的东西,本质上是一种美化的空虚*

对于你想做的事情有不同的方法,每种方法都有自己的要求和缺点

解决方案1:用户在编译时知道序列化数据的样子 只需编写一个接受类型的模板函数,然后尝试对其进行反序列化。检查二进制blob的运行时类型信息,如果类型不匹配,则引发异常

解决方案2:用户知道可能的类型集,std::variant方法: 利用访问者模式。您可以查看variant的界面了解详细信息

解决方案3:用户不知道将出现什么类型:
你在这里真倒霉。你需要做一些像std::any的东西,它本质上是一个荣耀的虚空*

我会使用
std::variant
。你的问题到底是什么?你必须在这里,在你的问题中,以及在任何其他网站上发布一个。我会使用
std::variant
。你的问题到底是什么?你必须在这里,在你的问题中,以及在任何其他网站上发表一篇文章。