草庐IT

c++ - 成员函数的typedef可以用辅助模板类来简化吗?

我最近发现使用以下辅助类可以简化函数指针语法:templatestructFun{typedefSig*Ptr;};它允许我指向void()的指针如下:typedefFun::Ptrfun_ptr;fun_ptrf=foo;我想创建一个类似的实用程序来创建成员函数指针的typedef。它将允许以下语法:structFoo{voidbar(){}};typedefMemFun::Ptrbar_type;bar_typeb=&Foo::bar;但是,我无法理解typedef语法:templatestructMemFun{//HowtouseTandSigtocreatememberfunc

c++ - 使用 SWIG 在 Python 中访问 C++ typedef

我有一个C++API,我想用Python包装。我想调用一个包装的C++函数myfunc,将以下C++typedef作为参数/*my_header.h*/namespacemy_namespace{typedefstd::vectorBar}其中Foo是一个C++类。我设法包装了函数和底层类Foo,但我不知道如何创建Foo的vector。我将.h文件包含在我的SWIG.i文件中,如下所示/*my_interface.i*/%{#include"my_header.h"typedefmy_namespace::BarBar;%}%include"my_header.h"我还尝试在SWIG中

c++ - 如何检查类型是否为 int 的 typedef

在C++中,我想要一个类,其构造函数如下:classA{explicitA(A*other){...}explicitA(intptr_tother){...}};这个问题是如果用户初始化Aa(0);然后,在64位系统上,编译器会提示它不知道0应该转换为A*还是intptr_t,这很公平。因为我想让这个简单的符号起作用,所以我添加了以下构造函数:explicitA(inta){assert(a==0);...}断言是因为这是唯一有意义的整数。现在,问题出现在32位系统中,其中intptr_t实际上是...int!所以现在,系统提示有两个构造函数采用相同的参数类型(同样,这很公平)。所以

c++ - 在模板实例化和外部模板声明中使用 typedef

typedef有两种情况当谈到externtemplatedeclaration时让我感到困惑和explicittemplateinstantiation.为了说明两者,请参见下面的2个示例代码片段。考虑以下示例(案例1)://supposefollowingcodeinsomecppfiletemplatestructexample{Tvalue;};//validtypedefstypedefexampleint_example;typedefexamplestring_example;//explicitinstantiationusingabovetypedefstemplat

c++ - 如何限制 typedef 类型的隐式转换?

假设有两种类型:typedefunsignedshortAltitude;typedefdoubleTime;为了检测一些错误,例如在编译时将高度位置的时间参数传递给函数,我想禁止从Altitude进行隐式转换。至Time反之亦然。我首先尝试的是声明一个operatorAltitude(Time)没有实现,但编译器说它必须是一个成员函数,所以我知道它不适用于typedef。编辑类型。接下来,我尝试将其中一种类型转换为一个类,但该项目似乎广泛使用了大量算术,包括隐式转换为double。,int,bool等,以及通过operator将它们传入和传出流和operator>>.因此,尽管这种方

c++ - 区分 typedef

我正在为C库编写C++抽象。C库有几个用于标识远程资源的ID的类型定义:typedefintcolor_id;typedefintsmell_id;typedefintflavor_id;//...color_idcreateColor(connection*);voiddestroyColor(connection*,color_id);//...所有这些typedef在编译器眼中当然是同一类型。这对我来说是个问题,因为我想重载函数并专门化模板以提供一个很好的C++友好API://can'tdothefollowingsince`color_id`,`smell_id`and`int

c++ - 通过 typedef : success at g++ , 强制模板实例化在 Visual C++ 中失败

我想强制模板实例化。以下代码在g++(http://coliru.stacked-crooked.com/a/33986d0e0d320ad4)下有效(print1)。但是,它在VisualC++(https://rextester.com/WGQG68063)中打印出错误的结果(0)。#include#includetemplatestructNonTypeParameter{};//internalimplementationintlala=0;templatestructHolder{staticintinit;};templateintHolder::init=lala++;/

C++ 打包 typedef 枚举

typedefenumBeNeLux{BELGIUM,NETHERLANDS,LUXEMBURG}_ASSOCIATIONS_BeNeLux;当我尝试使用C++编译器编译它时,出现错误,但它似乎可以在C编译器上正常工作。所以问题来了。是否可以在C++中打包枚举,或者有人能看出我为什么会收到错误消息吗?错误是:"semicolonmissingafterdeclarationofBeNeLux".我知道,在检查和重新检查之后,那里肯定有一个分号,并且在代码其余部分需要的任何地方。附录:_PACKAGE_只是一个例子。我正在重命名它。_ASSOCIATIONS_不是BeNeLux的一种:#

c++ - 相当于 int 的 typedef

如果我有一个模板容器,我可以使用typedef让我在编译时查找类型:templatestructMyList{typedefTType;Tget_front()const;//...};MyListchar_list;MyList::Typefront=char_list.get_front();在这种情况下,您可以改为声明charfront=char_list.get_front();,但有时这会很有用(例如包含其他模板类的模板类)。在我的例子中,模板没有指定类型名,而是指定了一个int(实际上是一个std::size_t):templatestructMyClass{//...};

c++ - 将 void 转换为 typedef(最佳实践)

将void数组转换为typedef的最佳做法是什么?这就是我目前的做法:typedefstruct{int16_tleft,right;}SampleStereo16;void*buffer[100000];//databufferSampleStereo16*sample;//insertsomethingherethatwritestothebuffersample=(SampleStereo16*)buffer;这似乎工作正常,但不知何故我觉得有更好的方法。我还想知道是否有办法让样本数组和缓冲区共享相同的内存(现在它们各自使用自己的内存)。这是我目前正在处理的完整代码:#incl