为什么在此成员调用中需要“模板”关键字?

时间:2018-11-28 14:30:27

标签: c++ templates

我刚刚解决了使我发疯的事情,但我不明白解决方案。

#include <string>

template <unsigned N>
class M
{
public:

    class P;
};

template <unsigned N>
class M<N>::P
{
public:

    template <typename String, typename Arg>
    String to_string (Arg);
};

template <unsigned N>
template <typename S, typename A>
S
M<N>::P::to_string (A x)
{
    return x ? "y" : "n";
}

void test ()
{
    typedef typename M<1>::P P1;

    P1 p;

    p.to_string <std::string> (123);
}

template <unsigned N>
void test ()
{
    typedef typename M<N>::P P1;

    P1 p;

    p.to_string <std::string> (123);
}

int main ()
{
    test ();

    test <1> ();
}

函数test()可以很好地编译,但是test<N>()不能。这是解决方案。

p.template to_string <std::string> (123);

通过错误消息的乐观半随机谷歌搜索,偶然发现了template关键字的用法。我不明白。

为什么这里需要template关键字?

0 个答案:

没有答案