小编Mos*_*oot的帖子

C++20中模板类的概念

我是模板和概念的高级使用新手,所以这里有一个有点复杂的问题:

  • Traits对每个Source类别的许多特征都有一些概念:

    template<typename _Traits>
    concept Traits = requires
    {
       std::same_as<std::decay_t<decltype(_Traits::token)>, std::string_view>;
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 我有一些模板类使用这个概念来处理object_one各种特征(例如,一半的Source类返回object_one):

    template <concepts::Traits _Traits>
    class Object_one_handler final
    {
        static std::string handle_object(const object_one& obj) {/*...*/}
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后我有了来自不同集合的Objects_handlers各种对象的处理程序的概念:{object_one, object_two, object_three}SourcesTraits

    template<template <concepts::Traits _Traits> class _Objects_handlers, typename _Object>
    concept Objects_handlers = requires(const _Object& obj)
    {
       // has handle_object method
       { _Objects_handlers<???????>::handle_object(obj) } -> std::same_as<std::string>;
    };
    
    Run Code Online (Sandbox Code Playgroud)
  • 最后,我创建了一些database指定为模板参数的内容Object_handler

    template<concepts::Objects_handlers _handler>
    class database 
    {...};
    
    Run Code Online (Sandbox Code Playgroud)

(实际上所有概念都有额外的要求,但这里并不重要) …

c++ templates c++-concepts c++20

2
推荐指数
1
解决办法
2392
查看次数

标签 统计

c++ ×1

c++-concepts ×1

c++20 ×1

templates ×1