template-meta-programming 相关问题

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

计算泛型 lambda 中的参数数量

我想创建一个函数来计算通用 lambda 函数中的参数数量。所以用户“yuri kilochek”有一个很好的解决方案计算 lambda 中的参数数量,但它......

回答 1 投票 0

在 C++ 中迭代元组类型

我想迭代元组的类型,而不是它的元素。 想象一下,您有一个通用的基类接口控制器,并且您想要一个指针向量(我使用原始指针而不是智能指针,...

回答 3 投票 0

实现偏应用时如何保证类型正确性

作为一个不太熟悉模板元编程细节的人,我想尝试实现一个(天真的)基本部分应用程序帮助器,将参数绑定到

回答 1 投票 0

根据给定标准合并两个元组

假设我们有两个元组a和b。 我想实现一个函数 merge_tuples ,它创建一个新的元组 c ,它是根据提供的二进制掩码 a 和 b 的合并:如果设置了一个位,我们...

回答 2 投票 0

稍后将类型替换为另一种类型

以后是否可以将一种类型替换为另一种类型。说: 使用类型=默认; //别的地方 使用类型=新类型; 这不会编译(而且你无法保证哪一个会出现......

回答 1 投票 0

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

有没有办法将枚举值映射到 C++(包括 C++11)中的类型。 我有以下枚举类型: 枚举属性{年龄=0、更年期、肿瘤大小、INV_NODES、NODE_CAPS、 DEG_MALIG,B...

回答 4 投票 0

C++17 中可能存在 is_variadic 类型特征吗?

在 C++17 中,是否可以设计一个类型特征来检测可调用对象是否是可变参数(因此可以采用任意长的参数数量)? 模板 是否可以在C++17中设计一个类型特征来检测可调用对象是否是可变参数(因此可以采用任意长的参数)? template <class Callable> struct is_variadic; 我目前不知道如何做到这一点,但我无法说服自己这是不可行的。那么如果可行的话会是什么样子? 如果函数类型是可变参数,则 is_variadic 类型特征为 true。 这意味着类型特征必须部分特化才能接受可以接受可变数量参数的函数类型。 template <typename> struct is_variadic : std::false_type {}; template <typename R, typename ...Args> struct is_variadic<R(Args..., ...)> : std::true_type {};

回答 1 投票 0

可以对可变参数模板的折叠表达式进行分箱,并使用参数列表到向量的转换吗?

当 C++ 17 中引入折叠表达式时,我学会了如何使用以下形式为可变参数模板编写代码: 参数 OP ... ETC。 现在,通常在编程中,当我们有一长串参数列表时......

回答 1 投票 0

C++:可以对可变参数模板的折叠表达式进行分箱,并使用参数列表到向量的转换吗?

当 C++ 17 中引入折叠表达式时,我学会了如何使用以下形式为可变参数模板编写代码: 参数 OP ... ETC。 现在,通常在编程中,当我们有一长串参数列表时......

回答 1 投票 0

从基类获取类型

假设我们有 派生类:公共 Base1、公共 Base2、...、公共 Base> {}; 如何编写一个从 Derived 获取类型 std::tuple 的类?也许基地需要...

回答 2 投票 0

C++ 模板参数排序

我正在寻找模板代码,通过其静态成员函数 static constexpr int getType() 的返回值对模板参数进行排序,如下所示: #包括 #包括<

回答 1 投票 0

自动推导基类模板的实际类型

我有许多类,每个类都定义一个内部结构 Result 并且全部派生自基类。我希望在基类中有一个返回派生值的实现方法

回答 2 投票 0

是否可以提供gtest类型参数化测试宏类型列表?

我发现 gtest 类型参数化测试在构建单元测试方面非常有效。但是,我想知道是否可以避免对 ::testing::Types<> 中的类型进行硬编码? 这是来自 gtest 的示例,我们...

回答 1 投票 0

仅当类型包包含 C++ 中的特定类型时才向类添加方法

我正在尝试创建一个可以包含类型包的类。 // 包.hpp 模板 类包最终{ Pack(const std::tuple items) : items_(std::move(items...

回答 1 投票 0

使用大量静态变量和模板元编程C++的缓存效率

假设我有下面的C++代码 模板 结构体 Foo { 静态内联 int x {}; }; int main() { 使用 T0 = Foo<0>; 使用 T1 = Foo<1>; ... 使用T999...

回答 2 投票 0

获取给定结构的内部结构类型列表的类型特征

考虑以下代码: #包括 #包括 结构体foo { 构造一个{}; 结构体b{}; 结构体c{}; }; // 我们在这里使用一个假设的类型特征 '

回答 1 投票 0

如何在 C++20 中定义一个概念来检查类型是否与类型列表中的任何类型匹配

我想用C++定义一个概念(<= C++20) to check if a type matches any of the types define in a type-list struct. The following is my attempt so far: template 结构

回答 1 投票 0

通过 C++ 元编程在编译时自动为每个模板专门化分配索引?

比如我想实现一个这样的模板函数: 模板 int GetTypeIndex() {} 它总是为相同的“T”返回行列式从零开始的索引,最后......

回答 1 投票 0

遍历 C++ std::tuple 的通用方法

我的目标是有一种通用的方法来遍历 std::tuple,下面的代码试图展示它: #包括 #包括 使用命名空间 std; 模板 我的目标是有一种通用的方法来遍历 std::tupple,下面的代码试图展示它: #include <iostream> #include <tuple> using namespace std; template <typename t, size_t t_idx, typename t_tuple> concept visit_tuple_element_value = requires(t &&p_t, const t_tuple &p_tuple) { { p_t.template operator()<t_idx>( std::declval<std::add_const_t<std::add_lvalue_reference_t<t_tuple>>>()) } -> std::same_as<bool>; }; template <typename t_tuple, typename t_function, size_t t_idx = 0> requires(visit_tuple_element_value<t_function, t_idx, t_tuple>) void traverse_tuple_values(t_function p_function, const t_tuple &p_tuple) { if constexpr (t_idx < std::tuple_size_v<t_tuple>) { if (p_function.template operator()<t_idx>(p_tuple)) { traverse_tuple_values<t_tuple, t_function, t_idx + 1>(p_function, p_tuple); } } } struct a {}; struct b {}; struct c {}; using my_tuple = std::tuple<b, a, c>; int main() { my_tuple _tuple; auto _visitor = [&]<size_t t_idx>(const my_tuple & /*p_tuple*/) { if constexpr (std::is_same_v<std::tuple_element_t<t_idx, my_tuple>, a>) { std::cout << "'a' is at index " << t_idx << std::endl; } else { std::cout << "'a' is NOT at index " << t_idx << std::endl; } return true; }; traverse_tuple_values(_visitor, _tuple); return 0; } 我收到错误: 'traverse_tuple_values<std::tuple<b, a, c>, (lambda at main.cpp:63:19), 3UL>' 我不明白为什么p_function.template operator()<t_idx>(p_tuple),因此_visitor,被称为t_idx等于3,如果我在traverse_tuple_values行if constexpr (t_idx < std::tuple_size_v<t_tuple>)。 g++ --version报告g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 正确的代码是,感谢@Eljay: template <typename t_tuple, typename t_function, size_t t_idx = 0> requires(visit_tuple_element_value<t_function, t_idx, t_tuple>) void traverse_tuple_values(t_function p_function, const t_tuple &p_tuple) { if constexpr (t_idx < std::tuple_size_v<t_tuple>) { if (p_function.template operator()<t_idx>(p_tuple)) { if constexpr ((t_idx + 1) < std::tuple_size_v<t_tuple>) { traverse_tuple_values<t_tuple, t_function, t_idx + 1>(p_function, p_tuple); } } } }

回答 1 投票 0

如何根据模板类型分配静态 constexpr 字段值

我想根据模板类型分配类的静态 constexpr 字段。 我找到了下面的解决方案,但我想这不是最好的解决方案,特别是如果有其他类型需要支持的话。也许...

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.