jjzjj

c++推导 "non type pointer to function"类模板参数

考虑一个模板类:templateclassProxy{voidrun(){ReturnTyperet=Fn();//...dosomething...}};//andafunctionsintfn1(){return5;}floatfn2(){return5;}这可以通过使用实例化:Proxyp1;但是显式声明返回值类型似乎是不必要的。我想要实现的是:someProxyInstantationp1;someProxyInstantationp2;不幸的是,我对c++没有任何期望,这似乎是该语言的一个隐藏角落(至少对我而言)。如果我可以从指向函数的指针获取它的类型——类似于:std::t

c++ - auto_ptr 和 dynamic_pointer_cast

如果我想将dynamic_cast与shared_ptr一起使用,我可以使用dynamic_pointer_cast。如果我想转换auto_ptr,我该用什么?我假设如下所示。structB:A{};...auto_ptrbase(...);auto_ptrderive=dynamic_pointer_cast(base);我正在为shared_ptr使用boost 最佳答案 auto_ptrbase(...);if(B*query=dynamic_cast(base.get())){//takeownershipbase.rele

c++ - Xcode4 : "bad codegen, pointer diff" linker error again

这个问题与此相关:"badcodegen,pointerdiff"linkererrorwithXcode4和"badcodegen,pointerdiffinboost"errorin32-bitbuild和XCode3.2.6and4linkererrorsld:badcodegen,pointerdiffin...toglobalweaksymbol我目前正在将我的所有项目升级到Xcode4,但我遇到了一些奇怪的事情。-仅当我构建通用二进制文件或32位版本时才会出现上述错误。如果我只坚持64位,一切正常。我正在自己构建一个自定义静态库,现在我不在该代码中使用任何可见性设置(即at

c++ - C++中的缓慢递归析构函数调用

我正在使用C++来表示使用引用计数对象的大图。像这样的东西://PublicclassclassPointer{public://ConstructorsPointer(...){node=...;node->counter++;}//CopyconstructorPointer(Pointer&constother){node=other.node;node->counter++;}//Destructor~Point(){if(--node->counter==0)deletenode;}//Othermethods...Node*node;};//Nodebaseclasscla

c++ - 指向虚函数的指针

所以我现在有点进退两难。我想做一个函数指针,但我想把它做成一个虚函数。不一定是虚函数本身,而是派生函数。我试着只制作指针,但函数需要是静态的。当我尝试创建静态虚函数时,编译器对我大喊大叫。我也不想使函数指针类特定,因此可以想象其他类可以使用该指针。这是我在伪代码中的意思:classC{public:virtualvoidsomething();};classB:publicC{public:voidsomething();};classD{public:voidsomething();};intmain(){void(*pointer)();Bb;Dd;pointer=b.someth

c++ - 重新解释为函数指针

这是我为reinterpret_cast实验编写的代码#include#includeusingstd::cout;usingstd::endl;intfoo(){cout(foo);//Convertionafunctiontypetoapointertofunctiontypebar();//displaysfoo.IsitUB?}首先为什么这样reinterpret_cast允许转换?我认为这种转换是错误的。 最佳答案 Thestandard(C++11§5.2.10/6)说Apointertoafunctioncanbeex

c++ - POINTER_32 - 它是什么,为什么?

我刚刚接到任务,将遗留应用程序从32位更新到64位。在审查任务的范围时,我在包含外部(例如平台)header之前立即发现了以下定义:#definePOINTER_32我找不到这个定义的用途或它有什么作用,但它看起来像是与我的任务直接相关的那种东西!它有什么用?它有什么用?立即移除它是否安全(我认为从长远来看有必要移除它)?这是使用MSVC++2008,即将成为2010。 最佳答案 这是一个通常在WindowsSDKheaderBaseTsd.hheader文件中声明的宏。在32位模式下编译时,它的定义如您所示。在64位模式下编译时定

c++ - 数组的引用

这个问题在这里已经有了答案:constpointerassigntoapointer(1个回答)constnessandpointerstopointers(4个答案)关闭9年前。我有以下代码charstr[]="somestring";//legalcharconst*str2=str;//legalcharconst**str3=&str2;//legalcharconst**str4=&str;//illegal(error:cannotconvert'char(*)[12]'to'constchar(*)[]'ininitialization)为什么最后一个编译不了?&str的

c++ - 从其他容器中辨别 smart_pointer 的模板函数

考虑以下模板函数:templateconstT*DoSomething(constT&t){auto&id=typeid(T);coutT*DoSomething(T*t){auto&id=typeid(T);coutclasscontainer>T*DoSomething(constcontainer&t){auto&type_id=typeid(T);auto&container_id=typeid(container);coutclasscontainer,templateclassdeleter=default_delete>T*DoSomething(constcontain

c++ - 在 C++ 中使用指针的变量值及其地址

我在理解指针时遇到一些问题。在下面的代码中,我尝试以两种方式打印变量的地址——一次使用地址运算符,然后使用指针:#includeusingnamespacestd;intmain(void){intx=10;int*int_pointer;int_pointer=&x;coutxaddress=0028FCC4xaddresswpointer=0028FCC4这按预期工作。但是当我做同样的事情但现在使用字符类型变量时,我得到一些垃圾输出:#includeusingnamespacestd;intmain(void){charc='Q';char*char_pointer;char_po