我是模板和概念的高级使用新手,所以这里有一个有点复杂的问题:
我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)
(实际上所有概念都有额外的要求,但这里并不重要) …