Здравствуйте, minorlogic, Вы писали:
M>1. Неубедительная мотивация для использование NVI.
Для меня убедительная..
сравним.
это:
class A
{
virtual void Foo()
{
if(enable == false)
{
Log << "Blah-Blah" << endl;
}
//TODO:
}
};
class B
: public A
{
void Foo()
{
if(enable == false)
{
Log << "Blah-Blah" << endl;
}
//TODO:
}
};
с вот этим:
class A
{
void Foo()
{
if( enable == false)
{
Log << "Blah-Blah" << endl;
}
_Foo();
}
virtual void _Foo()
{
//TODO:
}
};
class B
: public A
{
void _Foo()
{
//TODO:
}
};
+ Возможность создания префикса и постфикса к функции
+ Легко менять(сопровождать) префикс/постфикса при этом не боясь забыть гдето поменять.
+ Меньше кода! а значит меньше проблем на сопровождение.
+ Помогает избежать ошибок (забытые юзером проверки), если нужна обязательная валидация.
— Ущемляет права юзера на ликведацию пре/пост-фикса (может это и к лучему)
P.S. знаю _Foo писать не безопастно (чертов STL

).. просто для наглядности