Ik zit met de volgende programmeertechnisch-filosofische overdenking (sic):
Als je met C++ een DLL maakt, maak je uiteraard ook bijbehorende header. Stel nu dat je daarin gebruik maakt van elementen uit namespace NamespaceA, zoals een functie g. Is het dan meer logisch om in je header
In geval 1 bespaar je je een hoop werk, omdat je niet alles hoeft te prefixen. Maar stel dat je client van de bewuste DLL een NamespaceB bevat in dezelfde scope als waarin je DLL headers worden ge-include, en dat die NamespaceB ook een functie g() bevat. Dan zal de compiler klagen over ambiguïteit, waar je in geval 2, noch in geval 3 last van hebt.
Het probleem is bij mijzelf nog nooit voorgekomen, maar ik kan me voorstellen als je met veel libs van verschillende vendors werkt, dat je er wel eens tegenaanloopt. En als iemand hier relevante ervaring mee heeft, dan kan ik mijn DLL headers in de toekomst daar natuurlijk op afstemmen.
Vragen
Als je met C++ een DLL maakt, maak je uiteraard ook bijbehorende header. Stel nu dat je daarin gebruik maakt van elementen uit namespace NamespaceA, zoals een functie g. Is het dan meer logisch om in je header
C++:
te doen, of is er meer te zeggen voor1
2
| using namespace NamespaceA; int f() { return g(); } |
C++:
Dan is er trouwens ook nog de mogelijkheid om dit te doen:1
| int f() { return NamespaceA::g(); } |
C++:
1
2
3
4
| int f() { using NamespaceA::g; return g(); } |
In geval 1 bespaar je je een hoop werk, omdat je niet alles hoeft te prefixen. Maar stel dat je client van de bewuste DLL een NamespaceB bevat in dezelfde scope als waarin je DLL headers worden ge-include, en dat die NamespaceB ook een functie g() bevat. Dan zal de compiler klagen over ambiguïteit, waar je in geval 2, noch in geval 3 last van hebt.
Het probleem is bij mijzelf nog nooit voorgekomen, maar ik kan me voorstellen als je met veel libs van verschillende vendors werkt, dat je er wel eens tegenaanloopt. En als iemand hier relevante ervaring mee heeft, dan kan ik mijn DLL headers in de toekomst daar natuurlijk op afstemmen.
Vragen
- Heeft iemand wel eens last gehad van namespace clashes?
- Welke methode gebruikt de gemiddelde C++ lib-ontwikkelaar?
- Zoek ik problemen waar er geen zijn?
Wij onderbreken deze thread voor reclame:
http://kalders.be