pva>1. Если это синглетон — вызов будет один раз.
И что? Хоть один, хоть не один — из-за того что выбор реализции CHellowWorld вынесен в рантайм компилировать надо и линукс и виндовз реализацию это интерфейса не зависимо от того, для какой платформы собирается бинарник. Пусть, CHellowWorld выглядит так:
class CHellowWorldWin32 : public CHellowWorld
{
public:
virtual void showMessage(const char* msg)
{
::MessageBox(..., msg);
}
};
На линуксе (CHellowWorldLinux32) что-нибудь GTK-based.
Исходя из вашей логики:
CHellowWorld* CClassFactory::CreateHelloWorld()
{
switch (OsType())
{
case OsTypeWin32:
return new CHellowWorldWin32();
case OsTypeLinux32:
return new CHellowWorldLinux32();
};
return 0;
}
По CClassFactory::CreateHelloWorld() у меня только два вопроса:
1. как оно будет компилироваться?
2. зачем оно вообще нужно?
, то тогда да, определение типа ОС в рантайме имеет смысл (оно только в рантайме и возможно). Но ТС задавал другой вопрос.
Подскажите шаблон оснастки для кода на C++
От:
Аноним
Дата:
06.01.10 09:22
Оценка:
Есть некий продукт который придется писать на C++, хочется его грамотно оформить, смотрел я на open source проекты, там достато часто все оформлено в cmake , doxygen , cunit. К сожалению разобраться в готовых проектах не получается, много сущностей , не понятно что и зачем. Поэтому хотелось бы разобратся на простом примере.
Допустим нам надо разработать код который бы работал в настоящий момент только в windows, но в будущем есть намеки на то что под linux также потребуется.
Возьмем простейший пример, допустим
//hwbase.cpp;class CHellowWorldBase
{
public :
virtual void PrintHellow();
}
//hwwin32.cppclass CHellowWordWin32 : public CHellowWorldBase
{
public :
void PrintHellow();
}
//hwlin.cppclass CHellowWorldLinux : public CHellowWorldBase
{
public :
void PrintHellow();
}
//main.cppint main( ... )
{
CHellowWorld* hw = 0;
switch ( DetectSystem() )
{
case WIN32 : hw = new CHellowWorldWin32(); break;
case LINUX : hw = new CHellowWorldLinux(); break;
}
if ( hw != 0 )
hw->PrintHellow();
}
и ряд вопросов которые возникли :
1. как быть с NULL он использоваться должен повсеместно, но определен в виндовых хедерах — определить свой или ключами компиляции разные хедеры цеплять в зависимости от системы
2. как лучше реализовать специфичные для платформы решения — так как выше приведено в switch() или можно как-то более грамотно разрулить ситуацию, опять же ключами компиляции или как-то еще ?
3. хотелось бы увидеть примеры как это оформить с помощью cmake, cppunit, doxygen
Здравствуйте, alsemm, Вы писали:
A>И какой смысл определять симейство ОС в рантайме? Ладно, еще уметь различать win xp/vista. А для linux/windows есть дефайны и билдсистема.
А где там написано что определение идет в рантайме?
Здравствуйте, pva, Вы писали:
pva>Здравствуйте, alsemm, Вы писали:
A>>И какой смысл определять симейство ОС в рантайме? Ладно, еще уметь различать win xp/vista. А для linux/windows есть дефайны и билдсистема. pva>А где там написано что определение идет в рантайме?
Здравствуйте, Аноним, Вы писали:
А>Есть некий продукт который придется писать на C++, хочется его грамотно оформить, смотрел я на open source проекты, там достато часто все оформлено в cmake , doxygen , cunit. К сожалению разобраться в готовых проектах не получается, много сущностей , не понятно что и зачем. Поэтому хотелось бы разобратся на простом примере.
Прочитайте книгу "Шаблоны проектирования" от Э. Гамма и др. Также посмотрите как устроена библиотека Boost.
Если вы порываетесь делать подобные вещи через switch, это означает что у вас очень серьезные пробелы в проектировании.
Проект Ребенок8020 — пошаговый гайд как сделать, вырастить и воспитать ребенка.