但是当我试图用类模板实现一个过度封装的数据时却发现编译失败
#include<iostream>
using namespace std;
template <typename T>class some {
public:
T t;
some(T tt):t(tt) {}
friend ostream& operator<<(ostream& os, some s)
{
os << s.t;
return os;
}
};
template<typename T>
void it(T t);
int i = 1;
int main()
{
int a = 0;
it(a);
}
template<typename T>
void it(T t)
{
if (i > 0) {
i--;
cout << t;
some<T> s(t);
it(s);
}
return;
}
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C1202 递归类型或函数依赖项上下文太复杂
尝试把封装的次数降低,但是即使只要一次封装,这个用来进一步封装的函数都会报错
至少让它编译通过吧,最好同时回答一下“编译器会不会对简单的过度封装的数据进行优化”这个问题
模板参数不是得编译期间确定吗,你这个编译期间又没法确定递归层数,就无法确定模板参数
template<typename T>
void it(T t)
{
some<T> s(t);
it(s);
return;
}
这会导致无限递归,
有时间搞这种乱七八糟的东西,还不如先把语法学好,就知道为啥会递归了
i--放到27行之前,在递归调用前进行i值修改,否则你是个死循环嵌套啊,i值永远大于0
template <class T>
class some
{
public:
T t;
some(T tt) : t(tt) {}
friend ostream &operator<<(ostream &os, some &s) //
{
os << s.t;
return os;
}
};
template <typename T>
void it(T t);
int i = 1;
int main()
{
int a = 5;
it(a);
}
template <typename T>
void it(T t)
{
if (t > 0)
{
some<T> s(t);
cout << s;
it(--t);
}
return;
}