草庐IT

future_base

全部标签

c++ - 来自 std::promise 的未知异常

下面的代码有什么问题?运行时程序因未知异常而中止#include#includeintmain(){autopromise=std::promise{};autofuture_one=promise.get_future();promise.set_value(1);return0;}错误输出为terminatecalledafterthrowinganinstanceof'std::system_error'what():Unknownerror-1Aborted(coredumped)g++--version对我来说g++(Ubuntu5.4.0-6ubuntu1~16.04.2)

c++ - vector_base 继承与组合

小问题:C++STL实现使用vector_base结构/类(处理资源和分配器)作为std::vector的基类是否有原因而不是使用组合?更长的版本:在我提高C++知识的“追求”中,我一直在尝试重新实现一个Vector类,主要是std::兼容。我想我已经很清楚为什么使用分配器是明智的,为什么你实际上想要在一个单独的类/结构(RAII和所有这些)中处理所有内存,但我不明白为什么我们想要std::vector从该类继承而不是将其作为私有(private)成员。LLVM和gcc例如,两者都使用继承。另一方面,我发现构造函数和赋值运算符(尤其是move类型)使用组合更容易处理。我只是暴露了我对这

c++ - C++ 中 (base->*&Func)() 的含义是什么

下面是简单的类定义classBase{public:virtualvoidFunc(){cout和声明(b->*&Base::Func)();调用Func的派生版本,与b->Base::Func()不同,它按预期调用基础版本,为什么会发生这种情况,调用的确切含义是什么? 最佳答案 调用的意思是增加冗长。基本上:表达式&Base::Func是指向成员函数的指针,并且(b->*x)()是调用成员函数的语法x指向b指向的对象。在这个情况下,因为x是一个常量,所以它与写作大致相同*&变量。与b->Func()含义相同。至于为什么它的行为不同

c++ - 理解 std::future::then 的延续

谁能用C++中的示例解释async([](){x();y();})和async([]()之间的区别{x();}).then([](){y();})?我的理解是,在后一种情况下,x、y中的每一个都可能会立即在不同的线程中启动,并且只会在get时阻塞(在它们各自的线程中)()在未来作为输入传递时被调用。 最佳答案 ...whatisthedifferencebetweenasync([](){x();y();})andasync([](){x();}).then([](){y();})?真的不多-那么为什么要有呢?一言以蔽之可组合性。它

c++ - 在早期标准中使用为 future 标准批准的 C++ 技术规范是否安全?

FilesystemTechnicalSpecification(TS)最近已合并到C++17标准中。同样的TS也可用于C++14,但在这种情况下,它在技术上只是“实验性的”。然而,它已被批准用于C++17这一事实让我认为它已经足够成熟并且可以安全使用。在处理将来很可能会升级到C++17的C++14项目时,假设我使用的编译器在两个版本上都支持它,您是否建议不要使用“实验性”TS,考虑到它会正式成为下一个标准的一部分吗?我的问题当然扩展到任何已在未来C++版本中接受并且可用于早期标准的TS。 最佳答案 真正的问题是是否有人实现了它,而

c++ - 将 128 位十六进制字符串转换为 base-36 字符串

我有一个128位的十六进制数字存储在一个字符串中(来自md5,这里安全性不是问题)我想将其转换为base-36字符串。如果它是64位或更少的数字,我会将其转换为64位整数,然后使用我发现的算法将整数转换为base-36字符串,但这个数字太大了,所以我有点不知道如何处理这个问题。任何指导将不胜感激。编辑:在RolandIllig指出在电话中说0/O和1/l的麻烦并且没有通过十六进制获得太多数据密度之后,我想我可能最终会继续使用十六进制。我仍然很好奇是否有一种相对简单的方法可以将任意长度的十六进制字符串转换为base-36字符串。 最佳答案

解码base64来自r legiscan api的文本

我正在尝试分析Legisscan的帐单文本,但是正在遇到问题,从API拉响应中解码文本的问题。事实证明,Legisscan在第64号基准中编码所有立法的全文,当时我在解码它时遇到了一些麻烦。这个下载的JSON请求是我通过API下载的JSON结果的全文部分的一个示例。但是,通常的方法似乎并不是在努力。我尝试了什么:Legiscan似乎并不直接支持R,因此我使用了Legiscanr包。我使用LegisCanr的BillText函数获取正确的JSON链接,然后使用ParseBillText尝试将链接中的文本解码为UTF-8。但是,即使使用正确的API键和链接中说明的文档ID,它也会引发fromjso

c++ - OpenCV cv::Mat 到 std::ifstream 进行 base64 编码

老实说,我很惊讶到目前为止还没有人遇到过这个问题。我正在将一张图片从OpenCV加载到cv::Mat,我想在通过套接字发送它之前对其进行base64编码。对于base64,我使用libb64因为它是Debian/Ubuntu原生的,易于使用且速度非常快。编码函数将std::ifstream作为参数,并输出std::ofstream。#include#include#includeusingnamespacecv;Matimage;image=imread("picture.jpg",CV_LOAD_IMAGE_COLOR);if(image.data){std::ifstreamins

c++ - 在不使用流的情况下设置 double (ios_base::precision)

有没有办法不使用流来做到这一点?例如,像这样:doublea=6.352356663353535;doubleb=a.precision(5);代替:doublea=6.352356663353535;std::cout.precision(5);std::cout我是C++的新手,我很好奇。提前谢谢。 最佳答案 我已经根据@john、@Konrad和@KennyTM的建议修改了代码。我检查过它是否适用于负数。#include#includeusingnamespacestd;intmain(){doublea=6.35235666

c++ - 为什么 future::wait() 不阻塞

#include#include#include#includeintmain(){autopms=std::promise();autoftr=pms.get_future();std::thread([&](){pms.set_value("helloworld");});ftr.wait();std::cout根据thislink,std::future::wait阻塞直到结果可用。但是,上面的代码不能打印任何东西。显然主线程在pms.set_value线程完成之前就已经完成了。为什么ftr.wait()不阻塞? 最佳答案 问