在模板支持这一块,VC6表现很差,已经不是第一次了,看下面的代码就知道了:
- #include <iostream>
- using namespace std;
- template <class T>
- class CTrMatrix_Kernel
- {
- };
- template <class S, class T = CTrMatrix_Kernel<S> >
- class CTrMatrix_Shell
- {
- private:
- T* kernel;
- public:
- static CTrMatrix_Shell<S, CTrMatrix_Kernel<S> > zero()
- {
- }
- public:
- CTrMatrix_Shell()
- {
- }
- CTrMatrix_Shell(const CTrMatrix_Shell<S,T>& m)
- {
- }
- // template <class _K> //这个构造函数和上面的构造函数重复,导致编译出错
- // CTrMatrix_Shell(const CTrMatrix_Shell<S,_K>& m)
- // {
- //
- // }
- };
- void main()
- {
- CTrMatrix_Shell<double, CTrMatrix_Kernel<double> > obj;
- }
其实我们的意图很明显:让CTrMatrix_Shell支持多种类型参数的构造函数,但是很不幸,VC6的编译器对于不确定的类型,“只认识”一种;在两个构造函数中,_K和T对于VC6来说,是一样的;所以编译的时候会导致冲突。
另外,<<> >这样嵌套层次过深,尖括号连写(也就是两个右尖括号间没有留空格),都会造成“匹配错误”。