コピー不可および割り当て不可のvector::emplace
オブジェクトをデフォルトで構築し、新しく作成されたオブジェクトへのイテレーターを使用して、オブジェクトで特定のメソッドを使用したいと考えています。クラスのパラメーター化されたコンストラクターはなく、デフォルトのコンストラクターだけであることに注意してください。簡単な例は次のとおりです。
#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
Test() {}
private:
Test(const Test&) = delete; // To make clas un-copyable.
Test& operator=(const Test&) = delete;
int a_;
};
int main() {
vector<Test> test_vec;
test_vec.emplace_back(); // <---- fails
return 0;
}
vector::emplace()
新しいオブジェクトを構築しますが、デフォルト以外のコンストラクタへの引数が必要です。vector::emplace_back()
ベクトルの最後に構築されます。
デフォルトの構築で定置する方法はありますか。std::piecewise_construct
おそらくマップの場合と同様に、区分的な構築またはデフォルトの転送を使用する方法はありますか? たとえば、マップの場合、次を使用できます。
std::map<int,Test> obj_map;
int val = 10;
obj_map.emplace(std::piecewise_construct,
std::forward_as_tuple(val),
std::forward_as_tuple());
ベクトルに似たものはありますか?