草庐IT

pass-through

全部标签

c++ - 哪个更好 : returning tuple or passing arguments to function as references?

我创建的代码中有两个函数returnValues和returnValuesVoid。一个返回2个值的元组,另一个接受参数对函数的引用。#include#includestd::tuplereturnValues(constinta,constintb){returnstd::tuple(a,b);}voidreturnValuesVoid(int&a,int&b){a+=100;b+=100;}intmain(){auto[x,y]=returnValues(10,20);std::cout我读到了http://en.cppreference.com/w/cpp/language/st

C++ : syntax for passing iterator to a function?

我正在制作一个类,它是一种容器,我想制作一个可以采用“第一个”和“最后一个”迭代器的构造函数,如std::vector和其他标准容器。正确的语法是什么?(我想要一个模板函数,它可以接受任何可用的第一个/最后一个迭代器类型(就像我认为的标准库)。非常感谢!举个例子,我想要这样的东西:templateMyClass(...first,...last)但是……是什么?非常感谢。关于第一个答案:我想要一个将迭代器作为参数的特定构造函数(因为我已经有了将值和指针作为参数的构造函数)编辑:这样可以吗?templateMyClass(std::iteratorfirst,std::iteratorl

c++ - 最烦人的解析 : why doesn't `g( ( f() ) );` call `f` 's default constructor and pass the result to `g` 's ctor that takes a `f` ?

这不是Mostvexingparse:whydoesn'tAa(());work?的拷贝,它基于Aa());形式的解析,其OP认为可以使用额外的集合默认构造一个A对象括号。相比之下,我的问题是关于2个类,f和g,其中f具有默认构造函数,而g的构造函数采用f。我想用一个临时的f参数调用g的构造函数,而不使用统一的初始化语法。g的构造函数中有一个std::cout语句,因此缺少输出表示函数声明而不是g对象实例化。我在注释中用3个数字注释了示例代码。#1和#2编译时#3被注释掉,反之亦然:#includestructf{};structg{g(f){std::cout#1:我认为#1声明了一

c++ - 是否可以在不创建临时变量的情况下将 "pass"设置为未命名参数?

我正在使用未命名参数编写一个简单的基于类型的调度程序,我想这是很正常的事情。当真正调用该函数时,我想在手头没有任何变量的情况下进行重载。可能吗?例如voidf1(int/*canchangethetype*/){}intmain(int,char*){f1(/*whattoputhere?*/);return0;}我的“真实”示例是一个简单的基于类型的调度程序。我想出的最好的办法是将指针作为未命名参数,我认为它的开销可能最少:#includeusingnamespacestd;templateclassA{public:A(constU&u):u(u){};templateTget_a

c++ - 哪个更好 : Function overriding or passing a function pointer for event handling

因此,我正在为一个类编写代码,该类将进入一个供其他人使用的库。此类将拦截和处理传入的消息(细节并不重要,但它使用activemq-cpp库)。这个消费类的轮廓是classMessageConsumer{...public:voidrunConsumer();virtualvoidonMessage(constMessage*message);}其中runConsumer()建立连接并开始监听,并在收到消息时调用onMessage()。我的问题是:使用此代码的人将各自有自己的方式来处理不同的消息。我怎样才能保持MessageConsumer通用但提供这种灵active,同时保持代码简单?

C++ : double iteration through map

我想遍历一个map,但内部循环只会遍历元素的上半部分。使用vector它看起来像这样:for(autoelement1=myVector.begin();element1!=myVector.end();++element1){for(autoelement2=element1+1;element2!=myVector.end();++element2){//mystuff}}但是对于mapelement1+1返回错误nooperatormatchesthisoperand..我相信这是因为元素在map中没有排序.那么我怎样才能正确地做到这一点呢?我目前正在使用这种需要在每个循环中进行

c++ - 使用 C++ 的 OpenGL : vtable troubles when passing class array to glTexImage2d

我用floatr、floatg、floatb、floatalpha创建了一个类Color。它有一个带有虚拟析构函数的基类。我正在尝试将Color数组传递给opengl函数glTexImage2D,其中GL_RGBA组织类型为float(这将是一个数组{floatr,floatg,floatb,floatalpha}).这要求Color仅包含4个float(16字节大小)。但是,sizeof(Color)显示我的类有一个20字节的大小,因为Color的基类有一个vtable,感谢析构函数。如何保留我的vtable并将我的Color数组传递给glTexImage2D?

c++ - 我如何在 delphi 中定义 IOCTL_ATA_PASS_THROUGH?

我正在使用DeviceIoControl函数,我需要将IOCTL_ATA_PASS_THROUGH值传递给该函数。我找不到这个常量的任何delphi翻译,只是我找到了这个C++定义。#defineIOCTL_ATA_PASS_THROUGHCTL_CODE(IOCTL_SCSI_BASE,0x040B,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)但我在使用CTL_CODE宏将该值转换为delphi时遇到问题。问题是我如何在delphi中定义IOCTL_ATA_PASS_THROUGH? 最佳答案

C++ 模板复制构造函数,编译器说 "passing const as this argument discards qualifiers"

我正在尝试创建动态矩阵的模板类。凭借我目前对C++的了解,我设法解决了一些问题,但我被复制构造函数和重载operator=;困住了。换句话说,我无法创建对象的拷贝。在我看来这应该可行,但我的编译器friend告诉我有1个错误:错误:将“constMatrix”作为“intMatrix::getElement(int,int)[withT=int]”的“this”参数传递会丢弃此行的限定符[-fpermissive]:m[i][j]=original.getElement(i,j);当我想创建一个对象时:Matrixm=Matrix(3,3);我的模板类在这里:templateclass

c++ - Ada 到 C++ : Pass an unsigned 64-bit value

我需要将2条数据从Ada程序传递给一些C++代码进行处理。数据-双倍。时间-无符号64位。我能够使用Long_Float(在C++中为double)和Integer(在C++中为int,但显然不是64位)在Ada中创建一个与我的C++方法一起工作的过程。我使用了以下代码(代码不在我身上,所以语法可能略有偏差):proceduresend_data(this:inhidden_ptr;data:inLong_Float;time:inInteger);pragmaimport(CPP,send_data,"MyClass::sendData");现在它正在运行,我正在尝试将时间扩展到完整