Я писал код с такой структурой
namespace util {
void read (int &);
template <typename T>
void read (T &);
}
void foo ();
using namespace util;
namespace { // A
void read (MyType &, int);
void do_something () {
MyType t;
int i;
// using util::read; // B
read (i); // C
read (t,i); // D
}
}
void foo () {
do_something ();
}
Сначала строка C не компилировалась, если я полностью не квалифицировал ее как util::read(i)
или строку без комментария B, но это приводит к сбою строки D.
Специализация шаблона util :: read невозможна, поскольку количество аргументов отличается (до C ++ 0x).
Превратить строку A в namespace util
не вариант, потому что я не хочу экспортировать новый read
.
Я мог бы переименовать read(MyType&,int)
, но это нарушает стиль хем .
Есть ли способ заставить эти перегрузки между именами работать хорошо? Есть ли веская причина, по которой они не должны?