我有一个不可复制的(第三方)类。我想初始化它们的数组。这是我最好的尝试:
#include <array>
class Thing
{
public:
explicit Thing(int) {}
Thing(const Thing&) = delete;
};
int main()
{
std::array<Thing, 1> things{{{100}}}; // error here
};
GCC 4.7.2 说:
错误:从初始化列表转换为 'std::array::value_type {aka Thing}' 将使用显式构造函数 'Thing::Thing(int)'</p>
好的,但这正是我想要的——使用显式构造函数。我该如何表达?如果我真的自己调用构造函数,那么我会收到一个关于复制构造函数被删除的错误。而且我不能使用std::move()
,因为 Thing 是不可移动的(我不能修改它)。
到目前为止,我发现的唯一替代方法是https://stackoverflow.com/a/15962814/4323,但这是不可取的,因为它是一堆额外的代码,而且我需要在我使用它的任何地方投射“存储”(或保留一个单独的指向它的指针,它增加了我不想要的间接性)。
我想要一个解决方案,在实际使用 Things 时提供最佳性能,而没有很多丑陋的样板。