如果我有
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
个,所有这些都采用不同的U
类(来自同一类)基础),所以我一直在寻找一种干净的方式,而不需要与大量的这些功能交流。
答案 0 :(得分:2)
模板参数的数量很重要。您正在与一个带有两个模板参数的模板交朋友,但真实模板只有一个。它们是不同的实体。
你的朋友声明应该是:
template<class T>
friend void SomeFunc(T&, Object*);