Используйте
void notMethod(Foo::mapType::iterator it) {
// ...
}
и поместите typedef в публичный раздел объявления класса Foo
.
Edit:
Если вы хотите избежать этого, вы можете
- сделать
notMethod
другом (в соответствии с предложением DanDan),
- используйте шаблонное решение sbi или
- делает
notMethod
закрытой статической функцией-членом Foo
(которая генерирует точно такой же код, как если бы это была свободная функция, не являющаяся членом).
Какое решение является наиболее подходящим, зависит от того, что делает notMethod
.
Если notMethod
использует Bar
и Bar
действительно имеет смысл только в контексте внутренней реализации Foo
, я бы сделал notMethod
частной статической функцией-членом, поскольку она является частью Foo
внутренние органы.
Если notMethod
был оператором, который должен принять не-1034 * в качестве первого аргумента (это означает, что он не может быть членом Foo
), и если я хотел оставить Bar
закрытым Я бы сделал оператора другом.
Если notMethod
реализует универсальную операцию на итераторах, я бы сделал ее функцией шаблона.
Если Bar
- это класс, который может представлять интерес для клиентов Foo
, я бы сделал Bar
и typedef общедоступным и использовал бы решение, которое я предложил изначально.