jjzjj

c++ - GCC 中的元组模板

我首先在VS2010中使用MicrosoftVC++开始使用C++。我最近找到了一些工作,但我一直在使用RHEL5和GCC。我的代码主要是原生C++,但我注意到一件事......GCC似乎无法识别头文件或元组模板。起初我以为这可能只是一个拼写错误,直到我查看cplusplus.com发现该header确实不是标准库的一部分。问题是我喜欢在VisualStudio中编写代码,因为它的环境比eclipse或netbeans更优越、更美观,而且调试也很容易。问题是,我已经编写了大量代码来使用元组,而且我真的很喜欢我的代码。我该如何处理这个问题?这是我的代码:usingstd::cout;us

c++ - 将 std::forward_as_tuple() 结果传递给可能从该对象的右值引用成员移动的多个函数?

编辑:我认为我所问的最可能的用例是创建一个从std::forward_as_tuple()接收右值引用元组的函数.想到这个问题的原因是因为我正在检查传递给构造函数初始值设定项的对象的成员以查看它们是否是右值引用(我乐于接受建议告诉我这是wrongwrongwrongwrong...希望遵循经验法则以避免将来出现这种情况,但这就是引发问题的原因)。我突然想到,在稍微不同的上下文中,我可能最终将一个具有右值引用成员的对象传递给多个函数(或函数对象),我可能会或可能不会控制,这些成员可能会移动。templatevoidmy_func(std::tuple&&tup){//iftup'smem

c++ - 是否可以从大括号类型的初始化中推断出元组的模板参数?

在这个例子中,是否可以允许推导元组的模板参数类型?#include#includetemplatevoidfun(std::tuplet,std::stringother){}intmain(){fun(std::tuple(2.,3),std::string("other"));//okfun(std::make_tuple(2.,3),std::string("other"));//ok,buttryingtoavoid`make_tuple`fun({2.,3},std::string("other"));//desiredsyntaxbut//givingcompilation

c++ - 冲突的不匹配标签与标准库一起编译,但不以其他方式编译

我在看如何std::tuple_size在我系统的标准库中定义。我有一个MacOS,编译器版本是AppleLLVMversion8.1.0(clang-802.0.42).标准库位于InstalledDir中g++--version输出的位置鉴于以下代码无法编译(因为clang不喜欢将之前定义为struct的东西特化/重新声明为class,反之亦然)#include#include#include#include#includeusingstd::cout;usingstd::endl;templateclassSomething;templatestructSomething>;te

c++ - 使用另一个构造一个具体的 boost::tuple 类型

给定:typedefboost::tupleTuple_Tn其中类型T1,...Tn都已定义,给定类型T_another,我想定义一个新的元组类型:typedefboost::tupleTuple_T_plus_1但这是我的问题:在我想定义它的地方,我只能访问类型Tuple_Tn和T_another。换句话说,是否可以仅根据Tuple_Tn和T_another来定义Tuple_T_plus_1? 最佳答案 我不确定Boost.Tuple中是否有这样的功能,也许Boost.Fusion会更适合您的需求。但是,如果您有一个支持C++11

c++ - 具有 const 不可复制元素的元组

我需要创建一个std::tuple其中XYZ不可复制。这样的事情甚至可能吗?我当前的代码autotest()->std::tuple{returnstd::make_tuple(XYZ());}在VisualStudio2010中导致C2248...我发现这很可疑,因为我正在构建具有R值的元组,所以我假设移动构造会启动... 最佳答案 您的问题是该元素既不可复制又const.constXYZ元素表现为constXYZ成员;通过5.2.5p4访问constXYZxvalue上的元素将产生具有unioncv资格的xvalue,即具有有效

c++ - 通过 std::tuple<...> 实现 map() 和 each() - 将索引作为模板参数传递给仿函数

经过几年的Web开发,我再次使用C++(14)工作,并决定通过模板元编程获得一些“动态类型函数的乐趣”。我已经实现了map和each在元组上:templatevoidtuple_each_internal(Tupleconst&tuple,Funcfunc,index_sequence){autores={(func(get(tuple)),nullptr)...};}template::value>>voidtuple_each(Tupleconst&tuple,Funcfunc){tuple_each_internal(tuple,func,Indices());}structde

c++ - std::tuple 具有通用类型,如 boost::any

亲爱的程序员们,下面的代码让我有些头疼。它尝试将“通用”对象(=可以从任何东西构造的对象)添加到元组,然后复制该元组。#include#include#includestructanything{anything(){}anything(constanything&){std::coutanything(Targ){std::coutt;//std::coutt2(t);return0;}使用VS2015Update2它甚至无法编译,行std::tuplet2(t);触发tuple.h深处的编译器错误。使用gcc5.3.1可以编译,但输出不是我所期望的:复制构建t2,期待复制c'tor

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

c++ - 从元组函数一次存储 2 个变量

我有一个元组函数,它返回一个形式为的元组有没有一种方法可以在不创建另一个元组的情况下一次存储2个值。我知道我们可以做到n,score=tuplefunct(abc);在python中。但是如果我想在C++中存储两个返回值而不创建另一个元组,我需要调用两次n=get(tuplefunct(abc);score=get(tuplefunct(abc));在C++中是否有任何替代方法来一次存储值。 最佳答案 您不需要调用该函数两次(请注意,不涉及“另一个元组”,该函数返回一个,这就是您使用的):autox=tuplefunct(abc);