我刚刚解决了使我发疯的事情,但我不明白解决方案。
#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
关键字?