znaczacy > comp.lang.* > comp.lang.c

szykcech (29.12.2018, 22:34)
Witam
Chce pisac modulowe aplikacje w C++ gdzie sobie wydzielam poszczególne grupy funkcji i klas w biblioteki wspóldzielone. Problem na jaki natrafilem to zglaszanie bledów. Chce miec nazwe (Id) modulu jaki zglosil blad i numer tego bledu (wartosc z enum). Obecnieaby uniknac konfliktów nazw stosuje przestrzenie nazw rózne dla kazdej biblioteki. To dziala, ale denerwujace jest to, ze kod sie robi bardzo rozwlekly tylko z powodu prawidlowego raportowania bledów.

Jak rozwiazujecie taki problem w swoich aplikacjach modulowych?

szczesliwego Nowego Roku
Szyk Cech
Wojciech Mula (03.01.2019, 01:44)
On Saturday, December 29, 2018 at 9:34:44 PM UTC+1, szyk...@gmail.com wrote:
> Witam
> Chce pisac modulowe aplikacje w C++ gdzie sobie wydzielam poszczególne grupy funkcji i klas w biblioteki wspóldzielone.. Problem na jaki natrafilem to zglaszanie bledów.Chce miec nazwe (Id) modulu jaki zglosil blad i numer tego bledu (wartosc z enum). Obecnie aby uniknac konfliktów nazw stosuje przestrzenie nazw rózne dla kazdej biblioteki. To dziala, ale denerwujace jest to, ze kod sie robi bardzo rozwlekly tylko z powodu prawidlowego raportowania bledów.
> Jak rozwiazujecie taki problem w swoich aplikacjach modulowych?


Czy ja dobrze rozumiem, ze masz w swoim glównym programie enumy dla kazdej
biblioteki?

w.
szykcech (03.01.2019, 19:53)
> > Jak rozwiazujecie taki problem w swoich aplikacjach modulowych?
> Czy ja dobrze rozumiem, ze masz w swoim glównym programie enumy dla kazdej
> biblioteki?
> w.


Zle rozumiesz. W kazdym module (exe, biblioteki i enumy) mam plik{NazwaModulu}Definitions.h w którym mam zdefiniowane odrebne przestrzenie nazw (dla kazdego modulu) i w nich zmienna QString gLibraryId oraz enum eErrorCode . I pytam sie czy to jedyna droga?!? Bo wolalbym miec cos jak wirtualna nazwa modulu (gLibraryId) i wirtualny enum (eErrorCode) - z tym ze wirtualnosc ich mialaby zalezec od aktualnego miejsca w kodzie gdziezostana uzyte (ta sama nazwa w róznych modulach ale inne wartosci).
Wojciech Mula (04.01.2019, 21:26)
On Thursday, January 3, 2019 at 6:53:05 PM UTC+1, szyk...@gmail.com wrote:
> Zle rozumiesz. W kazdym module (exe, biblioteki i enumy) mam plik {NazwaModulu}Definitions.h w którym mam zdefiniowane odrebne przestrzenie nazw (dla kazdego modulu) i w nich zmienna QString gLibraryId oraz enum eErrorCode . I pytam sie czy to jedyna droga?!? Bo wolalbym miec cos jak wirtualna nazwa modulu (gLibraryId) i wirtualny enum (eErrorCode) - z tym ze wirtualnosc ich mialaby zalezec od aktualnego miejsca w kodzie gdzie zostana uzyte (ta sama nazwa w róznych modulach ale inne wartosci).


W czym wiec tkwi trudnosc? Pokaz kawalek kodu, bo nie
potrafie sobie tego wyobrazic.

Co robisz z tymi bledami na poziomie glównej aplikacji?
I co sie dzieje w kodzie modulu?

w.
szykcech (04.01.2019, 22:36)
> W czym wiec tkwi trudnosc? Pokaz kawalek kodu, bo nie
> potrafie sobie tego wyobrazic.


np. Mam takie zmienne w pliku SyntaxHighlighterPluginDefinitions.h:
namespace SyntaxHighlighterPlugin
{
static QString gLibraryId = QStringLiteral("SyntaxHighlighterPlugin.so");

enum class eErrorCode // defines all codes used in the library
{
eUnknown = 1,
eSpelingSystemError,
eEncodingError
};
}

By miec zmienna gLibraryId i eErrorCode wlasciwa dla kazdego modulu to musze uzyc przestrzeni nazw (jak to widac).
> Co robisz z tymi bledami na poziomie glównej aplikacji?


Zbieram je. Co program z tym robi to bez znaczenia - bo moze robic cokolwiek.

> I co sie dzieje w kodzie modulu?


Bledy raportuje standardowym makrem z parametrami: tresc wyjatku, nazwa modulu (z gLibraryId) i kod bledu (z enumu). Do tego makro dodaje info o miejscu wystapienia wyjatku (badz ostrzezenia). Laduje to na liscie w obiekcie typu singleton.
Podobne wątki