提问人:Guillaume BERLAND 提问时间:1/15/2023 最后编辑:Guillaume17Guillaume BERLAND 更新时间:1/15/2023 访问量:67
在编译时添加成员,无需复制/移动构造函数
Add members at compile time without copy/move constructors
问:
我正在学习可变参数模板和折叠表达式。 我想避免使用动态分配和指针。
为了说明我的问题,我创建了继承自 I_Foo 的 Foo(删除复制和移动构造函数)类。
class I_Foo
{
public:
virtual void Do() = 0;
};
template <int a, int b>
class Foo : public I_Foo
{
public:
explicit Foo(int x) : m_x {x} {}
Foo(const Foo &) = delete;
virtual ~Foo() {}
Foo & operator=(const Foo &) = delete;
protected:
virtual void Do() override { /* Do something */}
private:
static constexpr std::size_t k_ArraySize {a * b};
std::array<int, k_ArraySize> m_Array {};
int m_x;
};
我想创建一个包含 x 的 Pool 类I_Foo在编译时设置,但我不知道该怎么做。我完全迷失了。 实例化池可能如下所示:
template<typename... Args>
class Pool
{
public:
explicit Pool(Args&&... args) : /* No idea */ {}
private:
Foo1
Foo2
...
FooX
};
Pool<Foo<1,2>, Foo<3,2>> l_t_Pool { Foo<1,2>{1}, Foo<3,2>{2} };
我缺乏知识,无法知道这是否可行。:(
答: 暂无答案
下一个:无符号短段位域和匿名位域的合并
评论
Add members at compile time
这是不可能的。它需要动态调度和反射才能可用I_Foo1
Pool
Pool
I_Foo1
I_Foo1*
Foo
Pool
Foo