朋友模板功能

时间:2013-11-20 19:14:44

标签: c++ templates friend

如果我有

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类(来自同一类)基础),所以我一直在寻找一种干净的方式,而不需要与大量的这些功能交流。

1 个答案:

答案 0 :(得分:2)

模板参数的数量很重要。您正在与一个带有两个模板参数的模板交朋友,但真实模板只有一个。它们是不同的实体。

你的朋友声明应该是:

template<class T>
friend void SomeFunc(T&, Object*);