template-meta-programming 相关问题

模板元编程是一种元编程技术,其中编译器使用模板生成临时源代码,该代码由编译器与其余源代码合并然后编译。

C++ 元编程:从 CRTP c 访问编译时静态类成员

如何从 CRTP 类型的类访问静态 constexpr 内联变量? 我不明白为什么 T::X 在 struct Templated 中不可用? 模板 结构模板化 { 静态...

回答 1 投票 0

具有模板类型的 C++ TypeList 具有不能一起使用的索引和类型操作

对于我正在从事的项目,我一直在尝试实现一个以模板类作为可能类型的类型列表,我的实现的相关部分如下。一般情况下效果很好,但我...

回答 1 投票 0

如何使用元组类型作为模板参数将类型元组转换为类模板实例化元组

考虑以下类型。 模板 struct CompileTimeData{ static constexpr int data = data_; }; 模板 结构体S{}; 在 C++17 中,如何转换

回答 1 投票 0

C++运行时虚拟调度什么时候比函数模板更快?

大多数人都知道,模板元编程通常比 C++ 中的虚拟分派更快,因为模板的类型是在编译时决定的,而虚拟函数需要运行时查找

回答 1 投票 0

访问 std::variant 时获取其编译时索引?

我有一个可能重复类型的 std::variant,我想增加该变体的活动索引。 这是一个演示我想做的事情的示例: 模板 我有一个 std::variant 可能重复的类型,我想增加变体的活动索引。 这是一个演示我想做的事情的示例: template <typename... Ts> bool update_variant(std::variant<Ts>& v, std::tuple<work_generator<Ts>>& gen) { return visit_with_index([&]<size_t Index /* the active index */>(auto& e) { if (e.done()) { // we are done with e constexpr size_t next_index = Index + 1; if constexpr (next_index == sizeof...(Ts)) { // no more other work to do return false; } else { // still have other work to do so we move on to the next variant alternative v.emplace( std::in_place_index_t<next_index>{}, std::get<next_index>(gen).create_worker() ); return true; } } else { // do some work on e, so e gets closer to the done state e.do_some_work(); return true; } }, v); } 为了实现这一点,我似乎需要类似于上面visit_with_index的东西,它为我提供当前索引作为编译时值。 除了上面编写我自己的 visit_with_index 版本(实际上是编写我自己的 std::visit 版本)之外,还有其他更简单的方法可以实现我想要的功能,而无需通过索引执行多次查找吗? 我会在索引上使用 visit “直接”。 第一 template <typename... Ts> auto get_index_variant(const std::variant<Ts...>& v) { return [&]<std::size_t...Is>(std::index_sequence<Is...>){ using Ret = std::variant<std::integral_constant<std::size_t, Is>...>; std::array<Ret, sizeof...(Is)> a = {{Ret{std::integral_constant<std::size_t, Is>{}}...}}; return a[v.index()]; }(std::make_index_sequence<sizeof...(Ts)>()); } 然后 std::visit([&](auto index){ // index() is constexpr // ... }, get_index_variant(v)); 演示

回答 1 投票 0

如何将类型推导与函数参数声明分开?

如果我的函数 foo 按值而不是通用(转发)引用接受原始类型,我的应用程序会显着加速。然而,如果不是主要的,加速就会丢失......

回答 1 投票 0

如何在不添加额外副本的情况下拆分可变参数模板参数?

考虑以下 C++23 代码: #包括 #包括 #包括 结构W1 { 整数 n; 布尔b; W1(int x, bool f) : n(x), b(f) {} }; 结构W2 {...

回答 1 投票 0

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

我最近遇到了这个难题,终于能够找到一个黑客答案(使用索引数组),并想分享它(答案如下)。我确信有使用模板递归的答案......

回答 3 投票 0

是否有一个C++20概念,当使用某个库中的函数时会调用该概念?

我希望对某个库中的函数的所有调用都包含对我的函数的调用。 例如,每当调用库 中的函数时,我的函数 log() 都是...

回答 1 投票 0

使用C++元编程,如何判断你是在类方法中还是静态/全局函数中?

有没有办法确定当前作用域是全局函数/静态类方法还是类方法? 我想到了这个的存在,但我找不到一种不存在的技术

回答 1 投票 0

一组相关类型的类型特征的设计注意事项

C++ 标准库提供了 std::char_traits 来统一字符数据的处理,而不考虑所使用的具体字符类型。 它还提供 更多

回答 1 投票 0

C++0x TMP 编译速度

这个问题重点关注模板元编程结构。我发现两篇文章(一篇和两篇,两篇没有提供确凿的证据,但我相信这些说法)提供了证据表明......

回答 1 投票 0

std::integer_sequence

我已经开始使用这种类型的构造,它依赖于 C++20 的 lambda 显式模板参数: 模板 结构体Foo { std::tuple 条; 自动

回答 1 投票 0

std::tuple_element的编译时间复杂度(即编译器的运行时间复杂度)<N, TupleType>

假设在我的代码中我有以下行: 使用 T = std::tuple_element 其中 TupleType 是一个非常大的元组的类型,N 是一个非常大的数字(比如 1,000,000) 我明白了...

回答 1 投票 0

两个复杂的requires子句的解释

这篇文章讨论了一个计算类中成员数量的方法: struct UniversalType { 模板 运算符 T(); }; 模板 保守...

回答 1 投票 0

如何交错 C++ 模板参数包

我有这个c++模板函数 模板 无效一些func(){ // 做工作... } ,我可以这样称呼: somefunc<1, true, 2, false>(); 我想退出...

回答 1 投票 0

编译时多项式

我(终于)最近听说了可变参数模板。我想知道是否有一种方法可以使用编译时运算符创建 int - 多项式: 模板 结构多项式 {}

回答 3 投票 0

for 语句中的 constexpr

c++17 提供了 if constexpr,其中: condition 的值必须是根据上下文转换的 bool 类型常量表达式。如果值为 true,则丢弃语句 false(如果存在...

回答 4 投票 0

容器类型的C++工厂,无需定义容器元素类型

基于这个主题,我想知道是否可以有一个工厂类来提供容器类型,而不需要定义容器元素的类型。 像这样的东西: 模板<

回答 1 投票 0

尝试在旧代码中用新的 boost 替换旧的 boost 并得到错误,“type”:不是 boost::mpl::eval_if 的成员

我尝试用新版本的 boost 1.86 来编译使用非常旧的 boost 版本(比如 1.30 之类的)的旧代码(~15 年前 - luabind)。 我用 eval_if 替换了一些 apply_if 用法,就像建议的那样......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.