草庐IT

make_tuple

全部标签

C++ 将 std::tuple<A, A, A...> 转换为 std::vector 或 std::deque

在我正在编写的简单解析器库中,使用std::tuple_cat组合了多个解析器的结果。.但是,当应用多次返回相同结果的解析器时,将此元组转换为vector或双端队列等容器变得很重要。如何做到这一点?这种元组怎么能std::tuple,std::tuple,std::tuple等被转换成std::vector?我认为使用typename...As可能是可行的和sizeof...(As),但我不确定如何创建一个较小的元组来递归调用该函数。或者如何编写一个从元组中逐个提取元素的迭代解决方案。(因为std::get(tuple)是在编译时构建的)。如何做到这一点?

c++ - 可变参数模板 : producing a tuple of pairs of adjacent elements

我的目标是做一些事情,例如,pairs()有返回类型std::tuple,some_other_type,some_other_type>我想知道这是否可以通过C++模板元编程实现,以及如何实现。对于实际生成的值,似乎我可以使用tuple_cat递归地连接到输出,但我发现很难表达返回类型,因为它本身是可变的并且实际上是模板参数数量的函数。使情况复杂化的是,如果我走tuple_cat路线,似乎我还必须重载函数以获取要连接的元组,并且连接将在运行时发生,而不是编译时。我在这里是在徒劳地追逐吗? 最佳答案 这是一种方法。鉴于您的类(cla

c++ - 通过模板参数给定其长度,在编译时生成相同类型的 std::tuple

在C++中,我如何实现一个带有指示元组长度的int模板参数的函数并生成具有该长度的std::tuple?例如func()returnsstd::tuple();func()returnsstd::tuple(). 最佳答案 这是一个带有别名模板的递归解决方案,它可以在C++11中实现:templatestructtuple_n{templateusingtype=typenametuple_n::templatetype;};templatestructtuple_n{templateusingtype=std::tuple;};t

c++ - g++ 和 clang++ 在 `std::make_index_sequence` 和 `std::index_sequence` 用于模板参数默认类型时的不同行为

另一个“g++和clang++之间谁是正确的?”C++标准专家的问题。给定以下代码#includetemplate>structfoo;templatestructfoo>{};templatevoidbar(fooconst&){}intmain(){bar(foo{});}我看到g++编译时clang++给出了以下错误tmp_003-14,gcc,clang.cpp:32:4:error:nomatchingfunctionforcallto'bar'bar(foo{});^~~tmp_003-14,gcc,clang.cpp:27:6:note:candidatetemplate

c++ - GNU Make 产生完全不同的结果

这令人困惑。我有我的Makefile:OBJECTS=INCLUDE_BUILD_PATH=/Users/wen/Projects/include#ChangecompilationsettingshereCOMPILE=g++overrideCOMPILE_FLAGS+=-O2#Changelinker/compilerspecificsettingshereLD_FLAGS:=CC_FLAGS:=-c-I$(INCLUDE_BUILD_PATH)/bigint#AddsourceextensionshereSRC_EXT=cppcc#Addheaderdependenciesher

c++ - CMake: "make depend"的用途是什么?

cmake生成的目标之一是depend:ThefollowingaresomeofthevalidtargetsforthisMakefile:...all(thedefaultifnotargetisprovided)...clean...depend...edit_cache...rebuild_cache执行“makedepend”会有什么影响? 最佳答案 这构建了Makefile的某些目标的依赖关系规则。参见http://en.wikipedia.org/wiki/Makedepend

c++ - Qt 需要 C++11 支持"make error

我尝试按照README.md中的说明从源代码编译最新的平铺。我的工作环境:平铺源代码:tiled-0.16.1Mac操作系统:10.11.1Xcode:7.1Q制作:3.0Qt:5.7.0苹果LLVM:7.0.0但是make失败并出现以下错误:Infileincludedfrompythonplugin.cpp:21:Infileincludedfrom./pythonplugin.h:30:Infileincludedfrom../../libtiled/logginginterface.h:33:Infileincludedfrom../../libtiled/tiled_glob

c++ - std::tuple 和 std::pair 是否支持聚合初始化?

Aggregateinitialization除其他事项外,还需要没有用户提供的构造函数。但是std::tuple和std::pair对有一大组overloadedconstructors.从核心语言的角度来看,这些构造函数是用户提供还是用户声明?使用C++17可以编写(更新/说明:其中nocopy是不能复制或移动的类,例如std::mutex)autoget_ensured_rvo_str(){returnstd::pair(std::string(),nocopy());}编辑:不,这是不可能的,如答案链接和下面的答案中所述。这需要聚合初始化(对于上下文:Multipleretur

c++ - std::tie 和 std::forward_as_tuple 有什么区别

对于一个给定的类,如果我想写所有的比较运算符,为了避免代码重复,我会这样写:classB{public:booloperator==(Typeconst&rhs)const{returnas_tuple()==rhs.as_tuple();}booloperator!=(Typeconst&rhs)const{returnas_tuple()!=rhs.as_tuple();}//..andsameforotheroperators..private:autoas_tuple()const{returnstd::tie(a,b,c);//allthemembers}};我可以用std:

c++ - std::make_unique(以及 emplace、emplace_back)对 initializer_list 参数的笨拙推导

假设我有这个结构:structposition{intx,y;};和另一个将this作为构造函数参数的类:classpositioned{public:positioned(positionp):pos(p){}private:positionpos;};我怎样才能得到简单的autobla=std::make_unique({1,2});上类?目前,编译器试图通过initializer_list匹配并调用make_unique的数组变体,这很愚蠢,因为positioned只有一个构造函数。emplace出现同样的问题和emplace_back功能。几乎所有将其可变模板参数转发给类的构造