草庐IT

c++ - 在 C++ 中如何对一组自变量应用相同的操作?

编辑完全忘了提及对我来说显而易见的事情:a_func()想要修改var_xxx,因此使用const迭代的解决方案类型并不完全令人满意(尽管他们肯定会带来想法)。我觉得答案很简单,但找不到。给定:用户类类型(准确地说,数学vector对象)的变量的数量(一个小数字,如6、8、10),其中每个变量必须具有唯一的名称,由算法定义(按顺序进行计算,然后独立使用,并且能够方便地查阅代码所依据的论文)做:在一段代码中,计算并初始化这些变量,通过名称引用它们;然后在另一段代码中对它们执行扫描操作,而不必为每个变量重复调用操作(即函数)的代码。代码如下://inaclassdeclarationvec

c++ - 为什么 C++ 元组如此奇怪?

在将不同类型的值组合在一起时,我通常会创建自定义结构。这通常很好,我个人觉得命名成员访问更容易阅读,但我想创建一个更通用的API。在其他语言中广泛使用元组后,我想返回std::tuple类型的值,但发现它们在C++中的使用比在其他语言中的使用要难看得多。为了使元素访问使用整型值模板参数进行get的工程决策如下?#include#includeusingnamespacestd;intmain(){autot=make_tuple(1.0,"Two",3);cout(t)(t)(t)而不是像下面这样简单的东西?t.get(0)或get(t,0)有什么好处?我只看到问题在于:这样使用模板参

c++ - 具有可变参数的元组内容的部分特化

目前,我正在尝试让一些代码对不同的类型做出不同的react。这不是确切的代码,但它传达了信息。templatestructalpha{enum{value=0};};templatestructalpha,T>{enum{value=1};};//Thisgetsignoredtemplatestructalpha>,T>{enum{value=2};};//Thisgetsignoredtemplatestructalpha,T>{enum{value=3};};templatestructalpha>{enum{value=4};};templatestructalpha,std:

c++ - `std::tuple<int[N]>` 有什么用?

此处(https://stackoverflow.com/a/37550660/34509)用户@Barry可以在评论区备注std::tuple并且显然不禁止实例化这种类型。我还没有听说过这个野兽,我想知道它有什么用,而不是存储intvar[2]直接或使用std::array.据报道,std::tuple不可复制,不可移动,也不可从intvar[2]构造.它还有什么其他用途? 最佳答案 我很确定这是未定义的行为。请参阅Requires和Returns子句:tuple.creation-10and12说:Requires:Forall

c++ - 使用数组作为元组成员 : Valid C++11 tuple declaration?

下面的代码可以在G++4.7.2中正常编译:#includestd::tuplex;但是,使用clang++3.2会产生以下错误:错误:数组初始化器必须是一个初始化器列表。如果我从元组声明中删除float类型,错误就会消失。上面的元组声明是否有效?($CXX-std=c++11-c文件.cpp) 最佳答案 我认为标准中没有任何内容禁止您的声明。但是,一旦尝试初始化、复制、移动或分配元组,就会遇到问题,因为对于这些操作,元组的所有成员类型都必须能够用作初始化器、可复制构造、可复制分配和移动分配,分别(§20.4.2.1)。这些都不是数

c++ - 推断类型并省略移动/复制构造函数调用的元组聚合构造?

考虑以下mypair类(我不确定这是否是最好的方法,但它似乎有效):#includestructA{A(){}A(constA&){std::coutstructmypair{T0x0;T1x1;};templatestructget_class{};templatestructget_class{staticT0&get_func(mypair&x){returnx.x0;}staticconstT0&get_func(constmypair&x){returnx.x0;}staticT0&&get_func(mypair&&x){returnstd::move(x.x0);}};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++ - 命名空间标准重载小于

我很好奇为什么这段代码不起作用:#include"stdafx.h"#include#include#include#include#includetypedefstd::tupleintString;booloperator(lhs),std::get(lhs))(rhs),std::get(rhs));}voidprintIntStrings(std::vector&v){for(intString&i:v){std::cout(i)(i)v;v.push_back(std::make_tuple(5,"five"));v.push_back(std::make_tuple(2,"

C++ 赋值副作用

在尝试确保两个变量的升序时,我在VisualStudio2012C++编译器中遇到了奇怪的异常情况,可以通过以下代码片段说明doublex1=2;doublex2=1;std::tie(x1,x2)=std::minmax(x1,x2);std::cout人们会期望x1为1,x2为2。但事实并非如此。相反//output://x1=1,x2=1有什么好的解释,以免再次落入类似的陷阱吗? 最佳答案 std::minmax通过引用返回它的参数。你的陈述会发生什么,首先是x1被赋值为x2,即1。然后,x2被赋值为x1,这是2,但现在是1。

c++ - 如何用元组转发unique_ptr?

想象一个函数期望对std::unique_ptr的右值引用。voidfoo(std::unique_ptr&&a);在我的真实示例中,有不止一个参数,因此我决定使用std::tuple将参数转发给它右值引用-所以std::forward_as_tuple:voidforward_to_foo(std::tuple&&>&&t);intmain(){forward_to_foo(std::forward_as_tuple(std::make_unique(8)));}目前一切正常当我想“解压”这个元组时出现问题voidforward_to_foo(std::tuple&&>&&t){fo