Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

using namespace locale ad una classe

0 views
Skip to first unread message

Marco De Paoli

unread,
Jul 11, 2008, 4:36:28 AM7/11/08
to
salve a tutti

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

?manu*

unread,
Jul 11, 2008, 5:23:43 AM7/11/08
to
Marco De Paoli wrote:
> in un mio file header, in cui dichiaro la classe C, includo un file
> (boost/bind.hpp) che definisce un simbolo (boost::bind)

Io metterei nella dichiarazione della classe C

typedef boost::bind bind;

in questo modo rendi anche più esplicita la tua dipendenza da boost.

E.

Marco De Paoli

unread,
Jul 11, 2008, 5:34:16 AM7/11/08
to
On 11 Lug, 11:23, ?manu* <paol...@NO.math.unifi.SPAM.it> wrote:
> 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.

Nicola Musatti

unread,
Jul 11, 2008, 7:07:36 AM7/11/08
to
On Jul 11, 10:36 am, Marco De Paoli <depao...@gmail.com> wrote:
[...]

> 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?

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


Marco De Paoli

unread,
Jul 11, 2008, 7:12:48 AM7/11/08
to
On 11 Lug, 13:07, Nicola Musatti <nicola.musa...@gmail.com> wrote:
>
> Sospetto che aspettare la versione del compilatore che mettera' bind
> in std non sia un opzione ;-)

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

?manu*

unread,
Jul 11, 2008, 8:40:06 AM7/11/08
to
Marco De Paoli wrote:
> On 11 Lug, 11:23, ?manu* <paol...@NO.math.unifi.SPAM.it> wrote:
>
>>Io metterei nella dichiarazione della classe C
>>
>> typedef boost::bind bind;
>>
>>in questo modo rendi anche più esplicita la tua dipendenza da boost.
>
> boost::bind è una funzione e non una classe
> non posso fare typedef

Potresti dichiarare una funzione static inline C::bind.

E.

Marco De Paoli

unread,
Jul 11, 2008, 9:01:44 AM7/11/08
to
On 11 Lug, 14:40, ?manu* <paol...@NO.math.unifi.SPAM.it> wrote:

> 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.

Max M.

unread,
Jul 11, 2008, 10:45:22 AM7/11/08
to
Marco De Paoli wrote:
> 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

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

Marco De Paoli

unread,
Jul 11, 2008, 10:57:15 AM7/11/08
to
On 11 Lug, 16:45, "Max M." <ed...@maxim.comm2000.it> wrote:
> 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.
>

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

0 new messages