草庐IT

time_tuple

全部标签

c++ - 使用派生自 `std::get` 的元素在 `std::tuple` 上调用 `std::tuple` - 格式错误?

structY{};structX:std::tuple{};intmain(){std::get(std::make_tuple(X{}));}onwandbox当使用libc++时,上面的代码可以通过clang++编译并按预期工作。当使用libstdc++时,上述代码无法同时使用clang++和g++进行编译,并出现以下错误:include/c++/7.0.1/tuple:1302:36:error:nomatchingfunctionforcallto‘__get_helper(std::tuple&)’{returnstd::__get_helper(__t);}~~~~~~~

c++ - 完美转发和 std::tuple(或其他模板类)

我在完美转发方面遇到了一些困难。这是我目前的理解水平:胶合模板+右值引用+std::forward和一个特殊的魔法模式被激活,其中模板推导规则与通常的含义不同,但经过精心设计以允许完美转发。示例:templatevoidouter(T&&t){inner(std::forward(t));//perfectforwardingactivated}但是如果T实际上是一个模板类会怎样呢?例如,我如何完善转发std::tuple?如果使用T&&作为boce,我将丢失元组中包含的对象的所有类型信息。但是下面的代码不能工作:templatevoidouter(std::tuple&&t){inn

c++ - 为什么 std::chrono::system_clock::to_time_t() 不是 constexpr?

C++标准(github.com/cplusplus/draft)有time_t转换函数(std::chrono::system_clock::to_time_t和std::chrono::system_clock::from_time_t)用于列为static和noexcept但不是constexpr。鉴于time_point和duration上的所有操作基本上都是constexpr(包括duration_cast和time_point_cast),我想不出任何理由来排除它们。在我的本地机器上快速检查libstdc++源代码确认这些函数是作为简单的持续时间/时间点转换实现的。这两个函

c++ - G++ 4.6 -std=gnu++0x : Static Local Variable Constructor Call Timing and Thread Safety

voida(){...}voidb(){...}structX{X(){b();}};voidf(){a();staticXx;...}假设在进入main之后,f被多个线程(可能竞争)多次调用。(当然,唯一对a和b的调用是上面看到的那些)以上代码在-std=gnu++0x模式下用gccg++4.6编译时:Q1。是否保证至少调用一次a()并在调用b()之前返回?也就是说,在第一次调用f()时,x的构造函数是否会同时调用一个自动持续时间局部变量(非静态)(而不是在全局静态初始化时间)?Q2。是否保证b()只会被调用一次?即使两个线程第一次同时在不同的核上执行f?如果是,GCC生成的代码通过

c++ - 如何将大量秒数可移植地添加到 time_t 对象?

嗯,我认为标题总结了它。假设我有一个double类型的对象,它是通过在两个time_t对象上运行std::difftime获得的,现在我想添加结果返回到time_t对象的秒数。我不介意损失几分之一秒。请注意,秒数可能很大(即大于structtm中允许的60秒,但始终低于用于在相应机器/实现上表示秒的任何整数原语,并且永远不会超过1年的数量级,尽管我最好不希望这是一个限制)。我将如何着手可移植(即按照C标准)?我希望不必将它们分为月、日、小时、分钟等,然后手动将它们添加到structtm对象中。当然有更好的方法!? 最佳答案 您可以使

c++ - STL 容器 move 语义并按值返回 : how many times of copying get avoided away?

我知道在C++11中,move语义已经在STL容器中实现以避免临时对象。人们说现在编写按值返回的函数是完美的。但我对究竟有多少次复制实际上被避免感到困惑。请看下面的例子:vectormyVector(){vectorres;res.push_back(4);res.push_back(5);returnres;}vectorv=myVector();我的理解是在c++03中,myVector返回res的拷贝(4,5复制了一次),在评估vectorv=myVector();时vector的复制构造函数vector(constvector&)被调用(4,5复制了两次)。但是在具有move语

c++ - 尝试使用 std::get_time 解析 YYMMDD 并失败

我正在尝试这样做但失败了:std::istringstreamss("1212");ss>>std::get_time(&t,"%y%m");if(ss.fail())//everytime!这工作正常:std::istringstreamss("12-12");ss>>std::get_time(&t,"%y-%m");知道我做错了什么吗?我还能用什么,因为Windows似乎没有srtptimewindow/vs13时间差 最佳答案 VisualStudio似乎没有正确实现规范,GCCuntilversion5.0也没有。.如果您

c++ - SFINAE : Detecting if a function is called by a compile time known value

我喜欢在我的一个ctors以编译时已知值被调用时做一些检查。有办法检测吗?所以当有人调用它时:Aa(10);因为10是编译时已知常量,所以我喜欢调用一个特殊的构造函数,如下所示:template>A(intValue){}知道如何解决这个问题吗?谢谢! 最佳答案 积分常量可以解决您的问题:structA{template*=nullptr>A(std::integral_constant){}};然后,你可以像这样使用它:Aa{std:integral_constant{}};为了便于使用,您还可以使用类似于boost::hana的

c++ - 如果索引超出范围,如何从 std::tuple_element 返回 void?

我有一个函数特征结构,它使用std::tuple_element提供函数参数的类型:#include#include#includetemplatestructfunction_traits;templatestructfunction_traits{//Numberofarguments.enum{arity=sizeof...(T_Args)};//Argumenttypes.templatestructargs{usingtype=typenamestd::tuple_element>::type;};};intmain(){usingArg0=function_traits::

c++ - 使用 std::get_time 将时间字符串转换为 std::time_t:错误结果

我正在尝试按时间顺序对照片进行排序。因此,我从EXIF数据中将时间提取为字符串,然后将其转换为std::time_t。但是我有时会得到不正确的结果。我已将问题简化为这个最小的例子。它具有三个时间字符串,相隔一秒:#include#include#include#include#include#includeintmain(){std::vectorvec;vec.push_back("2016:07:3009:27:06");vec.push_back("2016:07:3009:27:07");vec.push_back("2016:07:3009:27:08");for(auto&