草庐IT

make_tuple

全部标签

c++ - 为什么没有 std::make_function()?

std::function是几乎所有可调用事物的有用包装器,包括自由函数、lambda、仿函数、成员函数,结果来自std::bind.但是,当创建std::function,必须明确指定函数签名,如(取自here)structFoo{Foo(intnum):num_(num){}voidprint_add(inti)const{std::coutf_display=print_num;//storealambdastd::functionf_display_42=[](){print_num(42);};//storetheresultofacalltostd::bindstd::fu

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?

c++ - std::tuple 和 std::tuple<std::tuple> 是否被 std::vector 视为同一类型?

我有一个像这样定义的变量autodrum=std::make_tuple(std::make_tuple(0.3f,ExampleClass,[](ExampleClass&instance){returninstance.eGetter();}));我希望drum是一个元组的元组。(即((a,b,c)))。我还有一个像这样定义的变量autobase=std::make_tuple(0.48f,ExampleClass,[](ExampleClass&instance){returninstance.eGetter();});我希望它只是三个元素的元组(即(a,b,c))我还有一个ve

c++ - std::tuple 和 std::tuple<std::tuple> 是否被 std::vector 视为同一类型?

我有一个像这样定义的变量autodrum=std::make_tuple(std::make_tuple(0.3f,ExampleClass,[](ExampleClass&instance){returninstance.eGetter();}));我希望drum是一个元组的元组。(即((a,b,c)))。我还有一个像这样定义的变量autobase=std::make_tuple(0.48f,ExampleClass,[](ExampleClass&instance){returninstance.eGetter();});我希望它只是三个元素的元组(即(a,b,c))我还有一个ve

c++ - 为什么 make_optional 会衰减它的参数类型?

(可能不是C++14,可能是LibraryTS)工具make_optional被定义(inn3672)为:templateconstexproptional::type>make_optional(T&&v){returnoptional::type>(std::forward(v));}为什么要转换类型T(即不只是返回optional),并且是否有使用decay的哲学(以及实际)理由具体作为转型? 最佳答案 decay的一般用途就是取一个类型,修改为适合存储。看看这些decay的例子工作,而remove_reference不会:a

c++ - 为什么 make_optional 会衰减它的参数类型?

(可能不是C++14,可能是LibraryTS)工具make_optional被定义(inn3672)为:templateconstexproptional::type>make_optional(T&&v){returnoptional::type>(std::forward(v));}为什么要转换类型T(即不只是返回optional),并且是否有使用decay的哲学(以及实际)理由具体作为转型? 最佳答案 decay的一般用途就是取一个类型,修改为适合存储。看看这些decay的例子工作,而remove_reference不会:a

c++ - tuple/tie的返回值优化

我正在研究元组/关系的返回值优化,我观察到的行为与我预期的不同。在下面的示例中,我希望移动语义能够发挥作用,它确实如此,但是仍然存在一个复制操作。以下优化后的输出为:Testduooutput,non_referencetupleDefaultconstructorinvokedParameterconstructorinvokedCopyconstructorinvokedMoveAssignmentoperatorinvoked100在函数内部创建元组时调用复制构造函数似乎是不必要的。有什么办法可以去掉这个吗?我正在使用MSVC2012编译器。#include#includecla