暗黙的な移動変換のためのテンプレートコンストラクタを持つクラスがありますが、このコンストラクタをクラスに使用しないでください(コンストラクタのみコピー可能)。ただし、コンパイラーは、通常のコピーコンストラクターの代わりにテンプレートコンストラクターを常に使用しようとします。テンプレートコンストラクタとテンプレートコピーコンストラクタ
これで、私は、コンパイラのエラー、linkを取得します。いずれかがこれを適切に解決するためにどのようにアイデアを得た
struct implementation{};
class my_class
{
my_class(my_class&&); // delete move-constructor... OUCH... COMPILER ERROR
public:
my_class(){}
my_class(const my_class& other) : impl_(other.impl_){}
template<typename T>
my_class(T&& impl) : impl_(std::make_shared<T>(std::move(impl))){} // Still tries to use this...
private:
std::shared_ptr<implementation> impl_;
};
class other_class
{
public:
my_class foo()
{
return instance_; // Wants to use move-constructor???
}
private:
my_class instance_;
};
(あなたがそれを試してみたい場合は、このコードを貼り付けるだけでコピーすることができますか)?
あなたはリファレンスを参照していますか? o_O –
rvalue-referenceと呼ばれ、http://www.artima.com/cppsource/rvalue.htmlを参照してください。 – ronag
ええ、 '&&'は "論理的な"と "resp"を意味するようになりました。コンテキストに応じて、 "rvalue reference"。トークンリサイクル*素晴らしい*ですか? :) – fredoverflow