#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
。我能做点什么吗,还是我的方法完全错了?
最终取决于int
和string
之间Matrix
的差异。
如果您处理的只是初始默认值,最简单的解决方案可能是外包给辅助函数:
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
};