コピーコンストラクタを持たないテンプレートクラスのインスタンスをマップに挿入しようとしています。 emplace
関数では、コンパイラーがコピーコンストラクターを呼び出すため、以下のコードは機能しません。 が不要なコピーや移動操作を回避しながら据え付けるの挿入時に構造体を含むstd :: mapにテンプレートクラスを挿入します
慎重に使用することは、新しい要素を構築することができます:私は移動またはコピーされませんを据え付けるC++ referenceからわかるので、私は、理由を理解していません。
これは私のコードです:
#include <map>
#include <string>
template<typename T> class Class_a
{
public:
Class_a(T t1, T t2) : t1_(t1), t2_(t2) {}
~Class_a() {}
Class_a(const Class_a&) = delete;
Class_a& operator=(const Class_a&) = delete;
Class_a(Class_a&&) = delete;
private:
const T t1_;
const T t2_;
};
template<typename T>
using Class_a_map = std::map<std::string, Class_a<T>>;
int main()
{
Class_a_map<double> class_a_map;
std::string name = "test";
double number1 = 42;
double number2 = 43;
class_a_map.emplace(name, Class_a<double>(number1, number2));
return 0;
}
なぜクラスを移動不能にしますか?移動可能だがコピーできない場合、これはうまく動作しているはずです。 – CoryKramer