2015-06-09 40 views
1
#include <iostream> 
#include <string> 
using namespace std; 

template <class Type> 
class Matrix 
{ 
public: 
    Type matrix[2][2]; 

     for (int i = 0; i < 2; i++) { 
      for (int j = 0; j < 2; j++) { 
       if (typeid(matrix[0][0]).name() == typeid(string).name()) { 
        matrix[i][j] = "0"; 
       } 
       else { 
        matrix[i][j] = 0;  //this is where I get C2593 
       } 
      } 
     } 
    } 
}; 

int main() 
{ 
    Matrix<string> mString; 
    Matrix<int> mInt; 
    . 
    . 
    . 
    return 0; 
} 

所以,我在此基质模板,我想"0"初始化它,如果矩阵的类型为字符串。否则,我想用0进行初始化。我在这里尝试了这件事,我得到了一个error C2593: 'operator =' is ambiguous。有什么我可以做的,或者我的方法是完全错误的?不同的构造函数模板:一个字符串和一个为别的

+0

[模板专业化](http://www.cprogramming.com/tutorial/template_specialization.html)? –

+0

另外,如果字符串矩阵在初始化时真的应该是字符串“0”,而不仅仅是空的?因为那样你就可以'矩阵[i] [j] = T();' –

+0

哦,我在拼写时犯了一个错误。我不是故意放置括号。 @JoachimPileborg不幸的是,他们必须,是的。 –

回答

4

它最终取决于Matrixintstring之间有多少不同。

如果你正在处理的是最初的默认值,最简单的解决办法可能是外包给一个辅助函数:

template <class Type> 
class Matrix 
{ 
    Matrix() { 
     for (int i = 0; i < 2; i++) { 
      for (int j = 0; j < 2; j++) { 
       setDefault(matrix[i][j]); 
      } 
     } 
    } 

    // ... 

    template <typename U> 
    void setDefault(U& u) { u = 0; } 

    void setDefault(std::string& u) { u = "0"; } 
}; 

如果你正在做的事情比较复杂,那么你可能要明确专门:

template <> 
class Matrix<std::string> { 
    // Matrix of strings 
}; 
+0

你好,先生,是一名专业人士。非常感谢,我从来没有想过这个辅助功能的东西!它像一个魅力 –

相关问题