私が持っているのは、基本的に へのポインタを保持する std::mapViews
です。
std::map<string,View*> myViews;
template<typename T>
bool addView( string assocName , T&& view )
{
typedef typename std::remove_reference<T>::type T2;
typedef typename T2::View dummy; // check if T is subclass of 'View'
// Remove any Current View
View* &data = myViews[assocName]; // reference to pointer
if( data )
delete data; // Delete Current associated view
// Insert the new View
data = new T2( std::move(view) ); // <-- Here is the error
}
「addView」は次の方法で呼び出されます。
viewSwitcher.addView( "3" , ScSetupPage3() );
私の問題は、クラス 'ScSetupPage3' にコピー ctor がないのに、'addView' がそれを呼び出そうとすることです!?
これはエラー メッセージです。私の GNU GCC は次のように表示します。
error: use of deleted function 'ScSetupPage3::ScSetupPage3(const ScSetupPage3&)'
解決策: ScSetupPage3 には、非プリミティブ ctor が宣言されているため、デフォルトの move ctor がありません。したがって、適切な ctor がない場合は、メンバーを移動したり、move-ctor を宣言したりできる場合でも、コピーされて移動されません。