草庐IT

c++ - 在运行时设置 vector 类型

我有一个程序需要在程序执行时设置vector的类型(根据配置文件中的值)。我试过这个:inta=1if(a==1)vectortest(6);elsevectortest(6);test.push_back(3);但这给了我:Error1errorC2065:'test':undeclaredidentifier我不完全确定为什么,但我认为这是因为vector实际上并不是在编译时决定的,因此编译器在编译其余代码时无法使用它。有没有一种方法可以像我上面尝试的那样在运行时决定vector的类型?我曾尝试在if之外创建一个版本,然后将其删除并在IF内重新编写新版本。但是,这感觉不对,无论如何

c++ - 如何在 C++ 中转换指针

voidfoo(void**Pointer);intmain(){int*IntPtr;foo(&((void*)IntPtr));}为什么会出现错误?error:lvaluerequiredasunary‘&’operand谢谢 最佳答案 voidfoo(void**Pointer);intmain(){int*IntPtr;foo((void**)&IntPtr);} 关于c++-如何在C++中转换指针,我们在StackOverflow上找到一个类似的问题:

c++ - 将不正确的值类型分配给结构属性时出现笑脸!

我有点想知道我是不是疯了,但我向你发誓,这段代码输出笑脸作为.name值!!这到底是怎么回事?到目前为止,它似乎只在值为1时有效,其他任何值都会出错。我意识到代码有缺陷->我不需要这方面的帮助。#include#include#include#include#includeusingnamespacestd;usingnamespacetr1;structCollectedData{public:stringname;floatgrade;};intmain(){stringline;listAllData;intcount;ifstreammyFile("test_data.txt"

c++ - 错误 C2893 : Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'

下面是一个给出编译时错误的程序。这主要与D类中的Boo函数有关。我最终尝试使用多个线程来调用solve方法,但目前这对我来说似乎不太有效,无法做到这一点。错误是:1>d:\dummy\project1\trash.cpp(37):warningC4101:'d':unreferencedlocalvariable1>c:\programfiles(x86)\microsoftvisualstudio\2017\community1\vc\tools\msvc\14.11.25503\include\thr\xthread(240):errorC2672:'std::invoke':no

c++ - 在 C++ 中包装来自不同库的自定义类型

当使用不同的库时,我总是发现每个库都有针对相同“真实词实体”的自定义类型。假设我有一个使用3维点的项目,我只使用来自OpenCv和PCL(点云库)的算法。我发现自己对这些类型有一点:OpenCv的Point3_PCL的PointXYZPoint3d我的自定义类型现在我有了为Point3d编写的算法,但我还想使用这些库中的算法。来回将大集合中的每个点从一种类型转换为另一种类型需要内存和时间。对此进行某种抽象的最佳方法是什么? 最佳答案 你可以这样做templatestructGetter{};templatestructGetter>

python - c++中python "type(<name>, <bases>, <dict>)"的等价物是什么?

好吧,我正在将python3.3嵌入到C++应用程序中。我希望在C++端动态创建一个Python类,就像我在Python中执行以下操作一样:my_type=type("MyType",(object,),dict())我知道我总是可以导入“builtins”模块,但我一般会尽量避免在C++端导入。谢谢! 最佳答案 以下似乎工作得很好:PyObject*type(constchar*name,boost::python::tuplebases,boost::python::dictdict){returnPyType_Type.tp_

数字类型的 C++ 非零默认值 - 重新发明?

我的想法是这样的:templatestructNumeric{Numeric(Tt=defaultValue):value(t){}Tvalue;Toperator=()(Tt);operatorT();};我可能会这样使用它:std::vector>nothingButTheTruth;我的问题很简单:这是一种好方法吗?如果是,标准库或Boost中是否存在类似的东西? 最佳答案 我更常见的模式是参数化容器,而不是类型。按自己的方式做有很多缺点:虽然你提供赋值和转换,但实际上你不能绑定(bind)一个bool&到Numeric.Av

参数列表中的 C++ 隐式类型转换

我对C++参数列表的隐式类型转换如何工作感到困惑。特别是,我有一堆函数称为inRange(x,start,end),它们根据x是否在开始和结束之间返回一个bool值。[在此描述中,inRange只是(x>start&&x我对上面的类型含糊不清。特别是整数和浮点比较有不同的实现,这意味着模板并不是真正合适的,因为没有C++语言分组来区分int/long/unsigned/size_t等与float/double等。所以我尝试了通过定义具有足够宽的int/float类型的两个版本的inRange来使用类型系统:inlineboolinRange(longx,longstart,longen

c++ - long long 初始化和 8 字节平台

我惊讶地发现,在关闭优化的Debug模式下,在以x64平台为目标的MSVS2012下,无法在一条指令中完成longlong初始化:;longlongl1=1;movDWORDPTR_l1$[ebp],1movDWORDPTR_l1$[ebp+4],0由于寄存器是8个字节,我希望有一条指令能够做到这一点...有吗? 最佳答案 在以x64为目标的快速控制台模式项目中尝试此操作并查看反汇编窗口:longlongl1=1;000000013F151035movqwordptr[rsp],1针对x86时的相同代码:longlongl1=1;0

c++ - 通过别名定义前向定义的 C++ 结构

我想围绕现有的C++代码库编写一个C包装器。所以我需要实现一些C-API函数,这些函数仅将它们的操作转发给相应的C++方法。我的问题是,我不知道如何通过现有类实现前向定义的结构://Foo.hppnamespacemyLib{structFoo{//somemeaningfulC++body};}//foo.h//#ifdef__cplusplusetc.leftoutextern"C"{structmyLib_foo;myLib_foo*mkfoo();//etc.}//foo.cppextern"C"{#include"Foo.hpp"#include"foo.h"typedefm