从编写Matrix模板到VC6对模板的支持

在模板支持这一块,VC6表现很差,已经不是第一次了,看下面的代码就知道了:
  1. #include <iostream>
  2. using namespace std;
  3. template <class T>
  4. class CTrMatrix_Kernel
  5. {
  6. };
  7. template <class S, class T = CTrMatrix_Kernel<S> >
  8. class CTrMatrix_Shell
  9. {
  10. private:
  11.     T* kernel;
  12. public:
  13.     static CTrMatrix_Shell<S, CTrMatrix_Kernel<S> > zero()
  14.     {
  15.     }
  16. public:
  17.     CTrMatrix_Shell()
  18.     {
  19.     }
  20.     CTrMatrix_Shell(const CTrMatrix_Shell<S,T>& m)
  21.     {
  22.     }
  23. //  template <class _K> //这个构造函数和上面的构造函数重复,导致编译出错
  24. //  CTrMatrix_Shell(const CTrMatrix_Shell<S,_K>& m)
  25. //  {
  26. //      
  27. //  }
  28. };
  29. void main()
  30. {
  31.     CTrMatrix_Shell<double, CTrMatrix_Kernel<double> > obj;
  32. }

其实我们的意图很明显:让CTrMatrix_Shell支持多种类型参数的构造函数,但是很不幸,VC6的编译器对于不确定的类型,“只认识”一种;在两个构造函数中,_K和T对于VC6来说,是一样的;所以编译的时候会导致冲突。

另外,<<> >这样嵌套层次过深,尖括号连写(也就是两个右尖括号间没有留空格),都会造成“匹配错误”。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值