ho il seguente problema
in un mio file header, in cui dichiaro la classe C, includo un file
(boost/bind.hpp) che definisce un simbolo (boost::bind)
supponiano che tale simbolo sia usato in molte funzioni inline della
classe C
per poter usare il simbolo (bind) direttamente senza bisogno di
premetterlo dal namespace (boost::bind)
potrei, dopo l'include (di boost/bind.hpp), dichiarare:
using boost::bind;
oppure:
using namespace boost;
problema:
in entrambi i casi (ancor più nel secondo) posso finire per dare
fastidio a tutti quelli che includeranno il mio header
causando eventuali conflitti sul simbolo (bind) che serviva a me per
l'implementazione della classe C ma che in effetti non è necessario
per gli utilizzatori di C
finora non ho trovato altra soluzione che ripetere
using boost::bind;
all'inizio del corpo di ogni funzione inline
vi vengono in mente altre soluzioni?
spero di essere stato chiaro
gradito qualunque commento
ciao,
Marco
Io metterei nella dichiarazione della classe C
typedef boost::bind bind;
in questo modo rendi anche più esplicita la tua dipendenza da boost.
E.
boost::bind è una funzione e non una classe
non posso fare typedef
ciao,
M.
Sospetto che aspettare la versione del compilatore che mettera' bind
in std non sia un opzione ;-)
Altrimenti la tua e' la soluzione migliore.
Ciao,
Nicola
in effetti, no :-)
...e comunque, a costo di sembrare paranoico, dove possibile
preferisco non scrivere
using namespace std;
>
> Altrimenti la tua e' la soluzione migliore.
>
ok, allora mi rassegno
grazie per i contributi, ciao
Marco
Potresti dichiarare una funzione static inline C::bind.
E.
> Potresti dichiarare una funzione static inline C::bind.
bind è una pletora di funzioni template in overload sui parametri
mi troverei a dover duplicare tutto dentro la mia classe
M.
Senza dubbio un header che inietta nomi nel namespace globale è male.
Se però tu dichiassi tutti i tuoi nomi in un namespace a parte (come è ormai
pratica diffusa), il problema nemmeno si porrebbe. Avresti un unico "using
boost::bind", che riguarderebbe soltanto il tuo namespace. E quando "bind"
sarà standard, avresti una sola modifica da fare.
Max
uso già i miei namespace
(addirittura a due livelli: livello esterno nome del progetto, livello
interno nome del package)
il fatto è che non voglio iniettare il nome neppure nel mio namespace
Marco