Я пытаюсь реализовать Идиому копирования и обмена для мой класс, поскольку мне нужно реализовать operator=
, и поскольку он имеет ссылочные элементы, а ссылки могут быть назначены только один раз, я подумал, что вышеупомянутая идиома является допустимым обходным путем.
Но теперь я получаю ошибку сборки:
>c:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(102): error C2259: 'IVariables' : cannot instantiate abstract class
1> due to following members:
1> 'IVariables::~IVariables(void)' : is abstract
1> d:\svn.dra.workingcopy\serialport\IVariables.h(6) : see declaration of 'IVariables::~IVariables'
1> 'std::string &IVariables::operator [](const std::string &)' : is abstract
1> d:\svn.dra.workingcopy\serialport\IVariables.h(7) : see declaration of 'IVariables::operator []'
1> 'unsigned int IVariables::getVariableLength(const std::string &) const' : is abstract
1> d:\svn.dra.workingcopy\serialport\IVariables.h(8) : see declaration of 'IVariables::getVariableLength'
1> Message.cpp(32) : see reference to function template instantiation 'void std::swap<IVariables>(_Ty &,_Ty &)' being compiled
1> with
1> [
1> _Ty=IVariables
1> ]
Это указывает мне сюда:
void Swap( CMessage& a, CMessage& b ){
using std::swap;
swap( a.m_bIgnoreIncoming, b.m_bIgnoreIncoming );
swap( a.m_Variables, b.m_Variables );
}
Это функция Swap из идиомы, а m_Variables
действительно является ссылкой на абстрактный класс. Разве нельзя поменять местами такие ссылки? Если для этого есть решение Boost, сообщите мне, поскольку я недавно начал его использовать.