template-meta-programming相关内容

用于检查容器类中是否存在函数和隐式演绎规则的C++概念

我正在尝试解决一些在概念和模板类型(如std::VECTOR)方面对我来说似乎很棘手的事情。 我正在尝试应用编译时间约束,类似于我在T上使用std::move的方式,但在C上使用PushBackMoovable时。它与函数Decl末尾的Requires一起工作,但我希望保持一致,并将我的约束放在模板args中。我试着用“PushBackMoovable C”替换“C类”,但失败得不是很严重, ..

如何迭代 std::tuple 的元素?

如何迭代元组(使用 C++11)?我尝试了以下方法: for(int i=0; i::value; ++i)std::get(my_tuple).do_sth(); 但这不起作用: 错误 1:抱歉,未实现:无法将“Listener ..."扩展为固定长度的参数列表. 错误 2:i 不能出现在常量表达式中. 那么,如何正确迭代元组的元素? 解决方案 Boost.Fus ..
发布时间:2022-01-24 11:18:58 C/C++开发

如何在 C++11 (STL) 中创建一个压缩两个元组的函数?

我最近遇到了这个难题,终于能够找到一个 hacky 答案(使用索引数组),并想分享它(答案如下).我确信有使用模板递归的答案和使用 boost 的答案;如果您有兴趣,请分享其他方法来做到这一点.我认为将这些全部放在一个地方可能会使其他人受益,并且对于学习一些很酷的 C++11 模板元编程技巧很有用. 问题:给定两个长度相等的元组: auto tup1 = std::make_tuple(1 ..
发布时间:2022-01-20 08:06:35 C/C++开发

使用开关展开循环的 C++ 模板?

我的问题类似于 在使用整数模板参数时可以展开循环吗? 但我想混合编译时间和运行时.具体来说,我在编译时知道一个常量 NBLOCK 并且我想在一个变量 start_block 上编写一个开关,该变量仅在运行时知道 NBLOCK是交换机中的条目数.这是我使用宏得到的结果: #define CASE_UNROLL(i_loop) \案例 i_loop:\dst.blocks[i_loop+1] -= ..

行为类似于 __COUNTER__ 宏的 C++ 构造

我有一组 C++ 类,每个类都必须声明一个唯一的顺序 id 作为编译时常量.为此,我使用了 __COUNTER__ 内置宏,它转换为一个整数,每次出现时都会递增.id 不需要遵循严格的顺序.唯一的要求是它们是顺序的,并且从 0 开始: A 类 {上市:枚举 { id = __COUNTER__ };};B类{上市:枚举 { id = __COUNTER__ };};//等等... 我的问题是: ..
发布时间:2022-01-11 19:39:36 C/C++开发

C++ 使用 boost fusion adapt_struct 迭代到嵌套结构域

两个stackoverflow 答案 建议使用 fusion adapt_struct 迭代结构字段的方法.这种方法看起来不错.但是,如何迭代到一个本身就是结构体的字段? 按照前面的答案,我想出了下面的代码.问题在于代码无法编译的“#if 0"子句.作为替代解决方案,我创建了“decode()"函数来获取指向目标参数的空指针.这有效,但在编译时丢失了类型信息.有更好的解决方案吗? stru ..

使用 Boost::odeint 和 Eigen::Matrix 作为状态向量

我正在尝试利用 ODE 集成功能Boost 使用 Eigen 3 中的矩阵类 作为我的状态向量,但我遇到了问题深入到我不知道如何解决的 Boost. 我正在尝试做的一个最小的例子: #include #include #include 使用命名空间特征;使用命名空间 boost::numeric::odeint;模板使用向量=矩阵<double,N,1>;typedef向量 3状态;int ..
发布时间:2021-12-24 15:34:22 C/C++开发

编译时常量 id

鉴于以下内容: templateA级{上市:静态常量无符号整数 ID = ?;}; 我希望 ID 为每个 T 生成一个唯一的编译时 ID.我考虑过 __COUNTER__ 和 boost PP 库,但到目前为止都没有成功.我怎样才能做到这一点? 编辑:ID 必须可用于 switch 语句中的情况 Edit2:所有基于静态方法或成员地址的答案都不正确.尽管它们确实创建了唯一 ID,但 ..
发布时间:2021-12-13 19:09:00 C/C++开发

优化交换机的模板替换

我的一个项目中有很多自定义数据类型,它们都共享一个公共基类. 我的数据(来自数据库)有一个数据类型,它通过基类的枚举来区分.我的架构允许特定数据类型专门用于派生类,或者可以由基类处理. 当我构造一个我的特定数据类型时,我通常直接调用构造函数: Special_Type_X a = Special_Type_X("34.34:fdfh-78");a.getFoo(); 有一些模板魔术 ..
发布时间:2021-12-13 19:08:49 C/C++开发

std::make_index_sequence 和 std::index_sequence 的细节

我很喜欢使用可变参数模板,并开始摆弄这个新功能.我试图了解 std::index_sequence 的实现细节(用于元组实现).我在那里看到了示例代码,但我真的想要一步一步地解释 std::index_sequence 是如何编码的,以及每个阶段有问题的元编程原理.想想真的愚蠢的:) 解决方案 我在那里看到了示例代码,但我真的想要一步一步地解释 index_sequence 是如何编码 ..

void_t“可以实现概念"?

我正在观看 Walter Brown 的 CppCon2014 的第二部分谈论模板元编程,在此期间,他讨论了他新颖的void_t 构造的使用.在他的演讲中,Peter Sommerlad 问了他一个我不太明白的问题.(链接直接指向问题,讨论中的代码直接发生在此之前) 萨默拉德问道 Walter,这是否意味着我们现在实际上可以实现精简版的概念? 沃尔特回应了 哦耶!我已经完成 ..

在编译时确定类型是否为 STL 容器

我想编写一个模板,用于在编译时确定类型是否为 stl 容器. 我有以下代码: struct is_cont{};结构 not_cont{};模板 struct is_cont { typedef not_cont result_t;}; 但我不确定如何为 std::vector、deque、set 等创建必要的特化... 解决方案 首先,你定义你的主模板,它有一个默认情况下为 ..
发布时间:2021-12-13 18:28:04 C/C++开发

C++ 模板图灵完备?

我听说 C++ 中的模板系统在编译时是图灵完备的.这在这篇文章和维基百科. 您能否提供一个利用此属性进行计算的重要示例? 这个事实在实践中有用吗? 解决方案 示例 #include 模板 结构因子{枚举 { val = Factorial::val * N };};模板结构因子{枚举 { val = 1 };};int main(){//注意这个值是在编译时 ..