我正在浏览HerbSutter的旅程:走向更强大、更简单的C++编程StructureBinding节为了理解这个概念。最好是写一个我试过但出现一些错误的程序Justwanttotryhowtousestructurebindingonclasswithprivatedata.Pleaseignorethebelowexample.ifanyexampleyoucanprovide#include#includeusingnamespacestd;classfoobar{public:foobar(){coutstructtuple_element{usingtype=int;};te
尝试制作std::get(std::tuple)之后我自己的方法,我不太确定它是如何被编译器实现的。我知道std::tuple有一个这样的构造函数:tuple(Args&&...args);但是args...到底是什么?分配给?我认为这对于了解如何使用很有用std::get()有效,因为需要将参数放在某个地方才能访问它们。 最佳答案 这是tuple的粗略玩具实现-喜欢上课。首先,一些元编程样板,用于表示整数序列:templatestructseq{};templatestructmake_seq:make_seq{};templat
如何通过std::get使用变量索引元组?我有以下代码:#include#includeusingnamespacestd;intmain(){tupledata(5,10);for(inti=0;i(data)它因以下编译器错误而失败:prog.cpp:Infunction'intmain()':prog.cpp:10:39:error:thevalueof'i'isnotusableinaconstantexpressioncout(data)&)'cout(data)constexprtypenamestd::tuple_element>::type&std::get(std::
我想为std::tuple编写一个fold函数,它可以计算例如给定元组中所有元素的总和(或乘积)。例如,给定std::tuplet=std::make_tuple(1,2);我想计算autos=sumT(t);//giving3我试过但无法编译下面的模板编程(c++11/1z)代码。我还尝试为我的其他问题(HowtoperformtuplearithmeticinC++(c++11/c++17)?)调整已接受的答案,但无法弄清楚如何在这种情况下使用std::index_sequence。我遇到的问题是:1)我无法弄清楚类型,例如如何使用第一个元素的类型作为返回类型。目前,我在模板中使用
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);}~~~~~~~
我有一个函数特征结构,它使用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::
使用g++-5我得到以下输出#include#includeintmain(){boolb;b=std::is_default_constructible::value;//Compiles,returnstrueb=std::is_default_constructible::value;//Compiles,returnsfalseb=std::is_default_constructible>::value;//Compiles,returnstrueb=std::is_default_constructible>::value;//Doesnotcompile}这是is_def
C++17引入了结构化绑定(bind)声明:auto[a,b]=some_tuple;.这对于像std::tuple这样的东西是开箱即用的。也可以使其适用于自定义类型,您只需提供(除其他事项外)一个get-function模板,作为成员或在自定义类之外。对于标准类,这是通过位于标准命名空间中的非成员获取完成的:autoa=std::get(some_tuple);有效,但无效autoa=some_tuple.get();.但这里对我来说很奇怪:因为我们必须显式地为get指定模板参数N,所以ADL不起作用,例如,我们不能只写autoa=get(some_tuple);.但是随后带有元组的
std::tuple包含以下构造函数:explicittuple(constTypes&...args);templateexplicittuple(UTypes&&...args);两者都有相同的描述,因为它们使用args中的相应值初始化每个元素。唯一的区别是在第二个参数被转发。根据我对右值引用的了解,我不明白为什么需要第一个版本,因为可以将相同的参数传递到第二个版本。引用将被转发,没有人会更聪明,特别是因为没有提到移动语义。谁能解释是什么让这两个构造函数成为必需? 最佳答案 这是一个简化的例子:templatestructfoo
我正在尝试练习一些模板编程。也许有一个标准的方法来做到这一点,我会很感激这样的答案,但我的主要目标是练习模板编程技术,所以我尝试自己实现它:我需要连接多个元组,但作为类型,不像std::cat_tuple可以。所以我需要类似cat,std::tuple,...>的东西得到std::tuple作为一种类型。我当前的尝试失败了isnotatemplate错误:/*Concattuplesastypes:*/templatestructcat{usingtype=typename_cat::type>::type;^^^^catisnotatemplate};templatestructca