我所拥有的基本上是一个 std::map 持有指向Views
.
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,因为它声明了一个非原始 ctor。因此,即使它的成员可以被移动甚至声明了一个 move-ctor,它也会被复制并且不会在缺少适当的 ctor 时移动。