草庐IT

Metaprogramming

全部标签

c++ - 将枚举值映射到 C++ 中的类型

有什么方法可以将枚举值映射到C++中的类型,包括C++11。我有以下枚举类型:enumATTRIBUTE{AGE=0,MENOPAUSE,TUMOR_SIZE,INV_NODES,NODE_CAPS,DEG_MALIG,BREAST,BREAST_QUAD,IRRADIAT,CLASS};我想将此枚举的每个值映射到特定类型。我想将AGE映射到int,将MENOPAUSE映射到另一个枚举类型,将BREAST映射到bool等等。那么是否可以创建一个函数来返回一个类型的值,该值取决于attr变量的值?//Likethat:autovalue=map_attr(ATTRIBUTEattr);/

c++ - 将结构拆分为元组

这个问题在这里已经有了答案:TMP:howtowritetemplatecodewhichconvertsanystructintoatuple?(1个回答)关闭4年前。问题很直接,我如何生成:std::tuple如果我知道类型:structFoo{floata;intb;doublec;};我如何在这两种转换中检索数据?

c++ - 使用模板元编程将模板函数 bool 参数转置为运行时函数参数

我有一个接受多个bool模板参数的函数:templatevoidfunction(intarg1,intarg2,intarg3);我想在编译时(使用任何模板魔术,如果需要使用C++11)自动生成一个函数指针表(或类似于C++元编程的有趣结构的东西)到所有组合模板参数par*的值,这样我就可以构造一个函数,将这些模板参数作为运行时参数并转发到正确的模板实例化:voidruntime_function(boolpar1,boolpar2,boolpar3,intarg1,intarg2,intarg3);我认为如果不是模板函数而是想对类做同样的事情,我认为这是可以做到的,这要归功于模板模

c++ - 当模板化类不包含可用的成员函数时,如何在编译时验证模板参数?

我有以下模板化结构:templatestructCPowerOfTen{enum{Value=10*CPowerOfTen::Value};};templatestructCPowerOfTen{enum{Value=1};};这样使用:constintNumberOfDecimalDigits=5;constintMaxRepresentableValue=CPowerOfTen::Value-1;//nowcanusebothconstantssafely-they'resurelyinsync现在该模板要求Degree为非负数。我想为此强制执行编译时断言。我该怎么做?我试图向CP

c++ - 访问 getter 的真正底层类型?

我知道setter/getter通常不好,但在这里,我只是用一个来说明一个更普遍的问题。考虑以下类:templateclassmy_tuplefinal{private:std::tuple_data;public:templatemy_tuple(U&&...u):_data(std::forward(u)...){}public:templateautoget()->decltype(std::get(_data)){returnstd::get(_data);}};考虑到我不能修改这个类。有没有办法,写一个外部元函数my_tuple_type(我所说的外部是指不属于该类的元函数)

c++ - Boost.MPL 和类型列表生成

背景这是用于游戏引擎中的内存管理器。我有一个freelist实现,如果有的话,我想有一个编译时列表。(例如,MPL或fusionvector)。freelist对应分配大小,当分配/释放大小小于常量的对象时,它们将转到相应的freelist。最后,这意味着小对象在全局范围内具有摊销的恒定时间分配和恒定时间释放。(耶。)问题问题是生成我需要的类型,因此我最终可能会使用Fusion来实例化这些类型。使用的类型是(缩写等):templatestructdata_block{size_tmSize;//=NcharmData[N];};templateclassAllocator=std::a

c++ - 如何从 TypeList 重建参数包

我有一个可变模板类型列表:templatestructtypelist{};然后我如何将它传递给一些需要参数包的外部代码,比如std::tuple.换句话说,我需要将参数包作为成员或typedef存储在我的类型列表中,例如...structtypelist{usingtypes=Types;//Imaginarysyntax}然而,这被编译器拒绝,说类型未扩展。任何解决方法?此问题在commentsofthisquestion中以另一种方式提及,但未包含在现有答案中。评论中要求的详细信息:如果我编译(-std=c++17):templatestructtypelist{};std::t

c++ - 如何为具有特定类型特征的所有类型编写函数模板?

考虑以下示例:structScanner{templateTget();};templatestringScanner::get(){returnstring("string");}templateintScanner::get(){return10;}intmain(){Scannerscanner;strings=scanner.get();inti=scanner.get();}Scanner类用于从某些来源提取标记。上面的代码工作正常,但是当我尝试get时失败了其他整数类型,如char或unsignedint.读取这些类型的代码与读取int的代码完全相同。.我可以只复制我想阅读

c++ - 从基指针向下转换为模板派生类型

我有以下层次结构:classbase{public:virtual~base(){}virtualvoidfoo(){}};templateclassderived1:publicbase{virtualvoidfoo(){};};templateclassderived2:publicbase{virtualvoidfoo(){};};现在给定一个指向基的指针,我想知道是否underlying是derived1或derived2。问题是derived1和derived2都可以专门用于许多不同的类型,使用dynamic_cast测试向下转换需要要知道的模板类型。我最终得到了一些困惑、无

c++ - 在编译时检查函数是否具有 C 链接 [无法解决]

有什么方法可以在编译时检查给定函数是否使用C链接声明(即使用extern"C")?我正在开发一个插件系统。每个插件都可以为插件加载代码提供工厂函数。但是,这必须通过名称(以及随后使用GetProcAddress或dlsym)来完成。这要求使用C链接声明函数,以防止名称修改。如果引用的函数是用C++链接声明的(而不是在运行时发现具有该名称的函数不存在时),那么能够抛出编译器错误会很好。这是我的意思的一个简化示例:extern"C"voidmy_func(){}voidmy_other_func(){}//Replacethisstructwithonethatactuallyworkst