【发布时间】:2021-09-21 05:33:01
【问题描述】:
假设我有编译时多态继承结构:
enum class Enum1 {
Undefined = 0;
/* ... */
};
enum class Enum2 {
Undefined = 0;
/* ... */
};
template<Enum1 A, Enum2 B>
struct Base {
int state;
};
struct Derived : public Base <Enum1::Undefined, Enum2::Undefined>> {
int statederived;
};
有没有办法做类似的事情:
template<Base<Enum1, Enum2> DerivedTemplate>
using Function = std::function<void (DerivedTemplate&)>;
完成:
Function<Derived> & function;
然后使用元编程基于这些派生类型创建一个类?
我可以为这些派生类型中的每一个创建一个类,但我想避免这种情况,因为我有大约 50 个。
基本上,我想避免不同派生类型与相同模板参数的冲突,同时仍然强制执行概念约束。
【问题讨论】:
-
澄清一下,您是否要求确保
Derived必须继承自Base<Enum1, Enum2>的any 实例化的约束?或者您是否试图将其限制为 特定 实例化,例如Base<Enum1::Foo, Enum2::Bar>? -
第一个,我想。但是让我明确说明:在我的实现中,实际上每个都存在 Enum1::Sometype、Enum2::Sometype 的一种派生类型,但从技术上讲,情况并非如此。我想做的是为每个特定的潜在派生类型声明这个函数模板,所有这些都在一个语句中。
标签: c++ templates nested metaprogramming c++20