草庐IT

Metaprogramming

全部标签

C++17:泛型(基于多重继承?)检查参数包中的模板

我需要一些代码来检查某个模板是否是参数包的一部分。为了实现对普通类的检查,我使用了概述的基于多重继承的方法,例如通过LouisDionnehere或AgustínBergéhere.类测试想法是包装每个类T在PackEntry的包装中类,然后有PackIndex继承自所有PackEntry类。这样,如果您正在寻找类(class)A,您需要做的就是检查是否有PackIndex可以转换为正确的PackEntry.把所有东西放在一起,它看起来像这样:#include#includetemplatestructPackEntry{usingtype=T;};templatestructPack

c++ - 为什么删除默认参数会破坏此 constexpr 计数器?

考虑以下实现编译时间计数器的代码。#includetemplatestructFlag{friendconstexprintflag(Flag);};templatestructWriter{friendconstexprintflag(Flag){return0;}};templateconstexprintreader(float,Flag){returnN;}template{})>constexprintreader(int,Flag,intvalue=reader(0,Flag{})){returnvalue;}template{}),int=sizeof(Writer)>c

c++ - 使用元编程展开嵌套循环

我有许多在编译时已知的小尺寸嵌套循环I,J,...,例如for(inti=0;i我需要使用大小I、J、...展开循环,以便我可以在编译时使用每个坐标组合。为了澄清,请考虑以下结构并采用2个大小为I=2,J=3的嵌套循环。templatestructC{staticvoidf(){//dosth}};我不能使用索引i,j(类似于上面)来索引结构C,因为它们在编译时是未知的。然而,我想要生成的正​​是我被允许使用索引时的情况,例如C::f();C::f();C::f();C::f();C::f();C::f();我并不特别关心调用生成的顺序,只要生成所有组合即可。生成机制应该推广到任意数量

C++ 数组下标运算符模板

在尝试使对存储类的访问变得更容易一些之后,我最终陷入了一种我没有太多知识的境地。而且,要找到和我做同样事情的人并不容易。我想做的是,有一个类在内部将值数组存储为字符串,但允许从用户端进行简单的类型转换。我计划做的是使用数组下标运算符返回他们通过模板指定的任何类型。虽然,这听起来比实际工作要好得多。这是我正在做的一个简单示例,让您了解它应该如何工作。classStringList{public:templateToperator[](constinti)}从那里,我会定义一些特定的模板,如果需要,任何用户都可以很容易地定义更多。但是,最大的问题是,我不知道如何用模板调用下标运算符。考虑到

带有 std::is_base_of 的派生类的 C++ 模板函数

我在为给定类型创建函数时遇到问题,如果它是从其他类型派生的,那么它会做某事,而对于所有其他情况,则做其他事情。我的代码:classBaseClass{};classDerivedClass:publicBaseClass{};templatevoidFunction(typenamestd::enable_if::value,T>::type&&arg){std::coutvoidFunction(T&&arg){std::cout对于DeriviedClass类和其他基于BaseClass的类,我想调用函数coutingProper,但是它couts不正确。有什么建议吗?

c++ - 如何实现 is_enum_class 类型特征?

这个问题在这里已经有了答案:Isitpossibletodetermineifatypeisascopedenumerationtype?(2个答案)关闭4年前。当且仅当传入的类型T是类枚举时,如何实现其值成员为true的类型特征?虽然我知道例如+T{};如果T是一个枚举会工作,如果它是一个枚举类则会失败,到目前为止我找不到将它用于SFINAE的方法。

可变类型列表前缀的 c++ std::tuple

我试图从一些可变类型列表中提取类型前缀。这是我的尝试:#include#includetemplatestructpack{};templatestructprefix_tuple;templatestructprefix_tuple,Tnext,Ts...>{usingtype=typenameprefix_tuple,Ts...>::type;};templatestructprefix_tuple,Ts...>{usingtype=std::tuple;};templateusingprefix_tuple_t=typenameprefix_tuple,Args...>::typ

c++ - 惰性评估

我如何惰性计算std::conditional中的第二个参数?#include"stdafx.h"#includestructNull{};struct_1{enum{one=true,two=false};};struct_2{enum{two=true,one=false};};templatestructis_nulltype{enum{value=false};};templatestructis_nulltype{enum{value=true};};templatestructX:std::conditional::value,Null,typenamestd::condi

C++ 模板字符串连接

我正在尝试定义一些这样的可变参数模板:typedefconstcharCCTYPE[];templatestructStringConcat{...};这样我就可以这样写:charfoo[]="foo";charbar[]="bar";std::cout;它打印了foobar。如果在C++0x中可行,我该怎么做?我真正感兴趣的是解决FizzBuzz使用C++模板时出现问题,我找到了解决方案here使用模板将int转换为char[]。 最佳答案 #include#include#include#includeusingnamespac

c++ - 在创建 C++ 枚举和依赖数据结构时如何避免重复自己?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Enumtostring:returntheenumintegervalueifinvalid/notfound简而言之,我的(工作)定义代码是这样的:enumGadget{First,Second,};constchar*gadget_debug_names[]={"First","Second",//note:stringsaresameasenumtokenshere,butbonuspointsif//theycanoptionallybegivendifferentvalues};但是,如果信息位于