Если бы у меня был
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
(которые происходят из одной базы), поэтому я искал чистый способ сделать это, не подружившись с тоннами эти функции.
Важно количество аргументов шаблона. Вы подружитесь с шаблоном, который принимает два аргумента шаблона, но реальный шаблон имеет только один. Это разные сущности.
Ваша декларация вашего друга должна быть:
template<class T>
friend void SomeFunc(T&, Object*);
SomeFunc
, все они будут использовать разные классы U
(которые происходят из одной и той же базы), поэтому я искал чистый способ сделать это. До сих пор у меня нет решения.