Функция дружеского шаблона

0

Если бы у меня был

namespace A
{
        template<class T>
        inline void SomeFunc(T& archive, Object* object)
        {
            // ...
        }
}

и класс без шаблона

namespace B
{
    class Manager
    {
        // ...
        template <typename T, typename U> friend void A::SomeFunc(T& t, U* u);
    };
}

почему Manager классов не распознает A::SomeFunc() как друга?

То, что я пытаюсь сделать: у меня будет большое количество этих SomeFunc s, которые берут разные классы U (которые происходят из одной базы), поэтому я искал чистый способ сделать это, не подружившись с тоннами эти функции.

  • 0
    Потому что они не одна и та же функция? Обратите внимание на другое количество аргументов шаблона.
Теги:
templates
friend

1 ответ

2
Лучший ответ

Важно количество аргументов шаблона. Вы подружитесь с шаблоном, который принимает два аргумента шаблона, но реальный шаблон имеет только один. Это разные сущности.

Ваша декларация вашего друга должна быть:

template<class T>
friend void SomeFunc(T&, Object*);
  • 0
    Имеет смысл. Дело в том, что у меня будет много таких SomeFunc , все они будут использовать разные классы U (которые происходят из одной и той же базы), поэтому я искал чистый способ сделать это. До сих пор у меня нет решения.
  • 0
    @ KristianD'Amato: потребность в дружбе встречается редко. Необходимость подружиться со многими различными функциями еще реже. Может быть, вы могли бы взглянуть на ваш дизайн и изменить его.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню