template-meta-programming相关内容
我正在尝试解决一些在概念和模板类型(如std::VECTOR)方面对我来说似乎很棘手的事情。 我正在尝试应用编译时间约束,类似于我在T上使用std::move的方式,但在C上使用PushBackMoovable时。它与函数Decl末尾的Requires一起工作,但我希望保持一致,并将我的约束放在模板args中。我试着用“PushBackMoovable C”替换“C类”,但失败得不是很严重,
..
我想编写一个将表写入HDF5文件的模板函数。 签名应类似 template void writeTable(const std::vector& data); 其中Record是结构,或 template void writeTable(const std::vector
..
在对 mpl::find 执行 mpl::find 之后,是否可以获得 mpl::vector 的偏移量? 换一种说法,我想做以下等价的编译时间: #include #include #include 主函数(){typedef std::vectorv_type;v_type v_int(3);
..
如何迭代元组(使用 C++11)?我尝试了以下方法: for(int i=0; i::value; ++i)std::get(my_tuple).do_sth(); 但这不起作用: 错误 1:抱歉,未实现:无法将“Listener ..."扩展为固定长度的参数列表. 错误 2:i 不能出现在常量表达式中. 那么,如何正确迭代元组的元素? 解决方案 Boost.Fus
..
我想在模板类中定义一些模板成员方法,如下所示: 模板类 CallSometing {上市:无效调用(T tObj);//第一个模板无效调用(T tObj,A aObj);//第二个模板模板无效调用(T tObj,A aObj,B bObj);//第三个};模板空白CallSometing::call (T
..
我想要一个函数,其行为类似于元组的 std::transform.基本上要实现的功能是 templatevoid tuple_transform(Tuple&& 源,Tuple&& 目标,Func f){//元素 `target` 的 ti 变为 `f(si)`,其中//si是`source`的对应元素}; 我相信要实现这一点,我需要一个 编译时整数范围 结构,它是 std
..
我最近遇到了这个难题,终于能够找到一个 hacky 答案(使用索引数组),并想分享它(答案如下).我确信有使用模板递归的答案和使用 boost 的答案;如果您有兴趣,请分享其他方法来做到这一点.我认为将这些全部放在一个地方可能会使其他人受益,并且对于学习一些很酷的 C++11 模板元编程技巧很有用. 问题:给定两个长度相等的元组: auto tup1 = std::make_tuple(1
..
用这个在线编译器构建,代码如下: #include #include #include int main() {std::cout >::value
..
我的问题类似于 在使用整数模板参数时可以展开循环吗? 但我想混合编译时间和运行时.具体来说,我在编译时知道一个常量 NBLOCK 并且我想在一个变量 start_block 上编写一个开关,该变量仅在运行时知道 NBLOCK是交换机中的条目数.这是我使用宏得到的结果: #define CASE_UNROLL(i_loop) \案例 i_loop:\dst.blocks[i_loop+1] -=
..
我有一组 C++ 类,每个类都必须声明一个唯一的顺序 id 作为编译时常量.为此,我使用了 __COUNTER__ 内置宏,它转换为一个整数,每次出现时都会递增.id 不需要遵循严格的顺序.唯一的要求是它们是顺序的,并且从 0 开始: A 类 {上市:枚举 { id = __COUNTER__ };};B类{上市:枚举 { id = __COUNTER__ };};//等等... 我的问题是:
..
两个stackoverflow 答案 建议使用 fusion adapt_struct 迭代结构字段的方法.这种方法看起来不错.但是,如何迭代到一个本身就是结构体的字段? 按照前面的答案,我想出了下面的代码.问题在于代码无法编译的“#if 0"子句.作为替代解决方案,我创建了“decode()"函数来获取指向目标参数的空指针.这有效,但在编译时丢失了类型信息.有更好的解决方案吗? stru
..
我正在尝试利用 ODE 集成功能Boost 使用 Eigen 3 中的矩阵类 作为我的状态向量,但我遇到了问题深入到我不知道如何解决的 Boost. 我正在尝试做的一个最小的例子: #include #include #include 使用命名空间特征;使用命名空间 boost::numeric::odeint;模板使用向量=矩阵<double,N,1>;typedef向量 3状态;int
..
我正在研究一个 C++11 习语,它可能被称为“重载 lambda": http://cpptruths.blogspot.com/2014/05/fun-with-lambdas-c14-style-part-2.html http://martinecker.com/martincodes/lambda-expression-overloading/ 使用可变参数模板重载 n 函
..
鉴于以下内容: templateA级{上市:静态常量无符号整数 ID = ?;}; 我希望 ID 为每个 T 生成一个唯一的编译时 ID.我考虑过 __COUNTER__ 和 boost PP 库,但到目前为止都没有成功.我怎样才能做到这一点? 编辑:ID 必须可用于 switch 语句中的情况 Edit2:所有基于静态方法或成员地址的答案都不正确.尽管它们确实创建了唯一 ID,但
..
我的一个项目中有很多自定义数据类型,它们都共享一个公共基类. 我的数据(来自数据库)有一个数据类型,它通过基类的枚举来区分.我的架构允许特定数据类型专门用于派生类,或者可以由基类处理. 当我构造一个我的特定数据类型时,我通常直接调用构造函数: Special_Type_X a = Special_Type_X("34.34:fdfh-78");a.getFoo(); 有一些模板魔术
..
Gcc 和 clang 似乎不同意这段代码是否应该编译: #include 模板 结构我的委托{};模板结构体签名特征;模板类委托,类型名称签名>struct signature_traits>{使用类型 = 签名;};static_assert(std::is_same_v>::type>);
..
我很喜欢使用可变参数模板,并开始摆弄这个新功能.我试图了解 std::index_sequence 的实现细节(用于元组实现).我在那里看到了示例代码,但我真的想要一步一步地解释 std::index_sequence 是如何编码的,以及每个阶段有问题的元编程原理.想想真的愚蠢的:) 解决方案 我在那里看到了示例代码,但我真的想要一步一步地解释 index_sequence 是如何编码
..
我正在观看 Walter Brown 的 CppCon2014 的第二部分谈论模板元编程,在此期间,他讨论了他新颖的void_t 构造的使用.在他的演讲中,Peter Sommerlad 问了他一个我不太明白的问题.(链接直接指向问题,讨论中的代码直接发生在此之前) 萨默拉德问道 Walter,这是否意味着我们现在实际上可以实现精简版的概念? 沃尔特回应了 哦耶!我已经完成
..
我想编写一个模板,用于在编译时确定类型是否为 stl 容器. 我有以下代码: struct is_cont{};结构 not_cont{};模板 struct is_cont { typedef not_cont result_t;}; 但我不确定如何为 std::vector、deque、set 等创建必要的特化... 解决方案 首先,你定义你的主模板,它有一个默认情况下为
..
我听说 C++ 中的模板系统在编译时是图灵完备的.这在这篇文章和维基百科. 您能否提供一个利用此属性进行计算的重要示例? 这个事实在实践中有用吗? 解决方案 示例 #include 模板 结构因子{枚举 { val = Factorial::val * N };};模板结构因子{枚举 { val = 1 };};int main(){//注意这个值是在编译时
..