当前位置: 首页 > 知识库问答 >
问题:

将概念映射到具体类型的惯用方法

丌官瀚
2023-03-14

给定一组C++概念:

concept A = ...;
concept B = ...;
concept C = ...;
class ProcessA;
class ProcessB;
class ProcessC;
std::is_same_v<get_matching_type<TypeThatSatisfiesA>, ProcessA>;
std::is_same_v<get_matching_type<TypeThatSatisfiesB>, ProcessB>;
std::is_same_v<get_matching_type<TypeThatSatisfiesC>, ProcessC>;
 using get_matching_type = std::conditional_t<A<T>, ProcessA, 
                              std::conditional_t<B<T>, ProcessB, 
                                std::conditional_t<C<T>, ProcessC>
                              >
                            >; 
template<A T>
struct get_matching_type<T> { using type = ProcessA; };
template<B T>
struct get_matching_type<T> { using type = ProcessB; };
template<C T>
struct get_matching_type<T> { using type = ProcessC; };

但是样板文件穿过屋顶:)

共有1个答案

凌意
2023-03-14

“模式匹配”可以通过重载完成:

template <TypeThatSatisfiesA T> ProcessA helper(T*);
template <TypeThatSatisfiesB T> ProcessB helper(T*);
template <TypeThatSatisfiesC T> ProcessC helper(T*);

template <typename T>
using get_matching_type = decltype(helper(std::declval<T*>()));

演示

 类似资料:
  • 问题内容: 背景 将列数据类型映射到其对应的Java类。 问题 查询从数据库返回元信息: 例如,此查询返回(自引用): 其中“ dictionary”是架构名称,“ resource_bundle”是object_name,“ column_name”是column_name。 要做类似的事情会很棒: 并返回以下查询: 然后使用JDBC发现已映射到。 问题 在PostgreSQL中,如何给定架构名

  • 我正在spring应用程序中使用graphql java工具。我有这样一个实体: 在GraphQL模式中,我想要一个不同的类型: 当然,由于模式解析异常,启动此操作将不起作用。所以我认为在模式解析之间放置一些东西来实现从到的映射是可能的。 这有可能吗? 编辑 抱歉,它不会给出架构解析异常。它将简单地将字节放入字符串中。但是我不能用这个字符串来创建图像。 澄清 对不起,我想我的问题还不够清楚。我不需

  • 若要添加一个新的实体,点击工具栏的 “实体”按钮,并点击画布的任意位置。你可以从浏览器的模型选项卡添加一个现有的实体,简单地从模型选项卡拖放实体到画布。 在画布中实体对象的弹出式菜单选项包括: 选项 描述 添加关联的对象 添加全部关联的实体到选择的实体。 剪切 从图表移除实体并放它在剪贴板。 复制 从图表复制实体到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部实体 在图表中选择全部实体。 删除

  • 若要添加一个新的实体,点击工具栏的 “实体”按钮,并点击画布的任意位置。你可以从浏览器的模型选项卡添加一个现有的实体,简单地从模型选项卡拖放实体到画布。 在画布中实体对象的弹出式菜单选项包括: 选项 描述 添加关联的对象 添加全部关联的实体到选择的实体。 剪切 从图表移除实体并放它在剪贴板。 复制 从图表复制实体到剪贴板。 粘贴 将剪贴板的内容贴到图表。 选择全部实体 在图表中选择全部实体。 删除

  • 我正面临着一个挑战,而工作类型映射的查询构建通过DoctrineSQL查询生成器(从DBAL,而不是ORM)使用MySQL 8。 执行的查询从数据库返回以下三列: 用户id(表中的bigint列) 起始时间(表中的日期时间列) 结束时间(表中的datetime列) 但是,通过我当前的实现(例如简化),没有值映射到它们的PHP对应项。 fetchAll()方法返回的结果返回一个

  • 如何定义两个类之间的< code >一对一关系?我想我在某个地方出了问题,在概念上。我不知道是什么,但确实是。 让我们假设有两个类命名为 和 : 现在对于一个国家来说,只能有一个PM,PM只能属于一个国家。如何在映射文件中执行此操作? 我在尝试这个: 但是这种有效的映射只会在运行时产生异常。它说属性在类中找不到!但是它在类中搜索吗?它应该在类中搜索。 也帮我完成这两个类之间的< code >一对一