dba*_*dba 11 c++ c++-concepts c++20
有没有一种方法可以使用 C++ 概念来要求类派生自模板化类,而模板化类的模板参数又是另一个模板化类的派生类。
例子:
template <class T>
class A{};
template <class T>
class B{};
class X{};
class Y : public A<X> {};
class Z : public B<Y> {};
Run Code Online (Sandbox Code Playgroud)
我如何办理登机手续B,这是某些人的T表格而不指定是什么?我不想添加到 的模板参数列表中,因为我不想在派生自的每个实例上更改代码(例如最后一行)。std::is_base_of<A<X>,T>XXXBBclass Z
Sto*_*ica 14
如果你想检查A具体的专业,那并不太困难。
template <class C>
concept A_ = requires(C c) {
// IILE, that only binds to A<...> specialisations
// Including classes derived from them
[]<typename X>(A<X>&){}(c);
};
Run Code Online (Sandbox Code Playgroud)
lambda 基本上只是重载以接受A特化的函数的简写。从此类专业衍生的课程也计入其中。我们使用我们正在检查的类型的参数调用 lambda...并且约束是 true 或 false,具体取决于调用是否有效(参数被接受)。
然后,只需将其插入即可:
template <A_ T>
class B{};
Run Code Online (Sandbox Code Playgroud)