#include <iostream>
using namespace std;
class A{
public:
void K()
{
cout<<"1";
};
};
class B{
public: typedef A T;
void K()
{
cout<<"2";
};
};
class C{
public:
void K()
{
cout<<"3";
};
};
class D{
public:
void K()
{
cout<<"4";
};
};
template <class D=A> class E{
public: typedef D T;
void K()
{
cout<<"5";
};
};
template <> class E<A>{
public:typedef C T;
void K()
{
cout<<"6";
};
};
template <>class E<C>{
public:typedef B T;
void K()
{
cout<<"7";
};
};
template <class W, class V=E<W> >
class F{
typedef typename V::T R;
public:
void K()
{
V().K();
W().K();
R().K();
};
};
int main(){
E<>().K();
F<A>().K();
F<C>().K();
return 0;
}
我不知道为什么程序输出是6 - 612 - 732.如果有人可以帮助我这个程序如何工作,这将是很棒的,即使是第一行主。如果有人能够告诉我为什么第一个cout是一步一步的,那该多好。程序输出与模板和typedef类
解决此类问题的正确工具是您的调试器。在*堆栈溢出问题之前,您应该逐行执行您的代码。如需更多帮助,请阅读[如何调试小程序(由Eric Lippert撰写)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,你应该[编辑]你的问题,包括[最小,完整和可验证](http:// stackoverflow。com/help/mcve)示例,它再现了您的问题以及您在调试器中的观察结果。 –
[这是否澄清了多一点?](http://coliru.stacked-crooked.com/a/a58abdf4e557a8ae) –