模板中的构造函数不同:一个用于字符串,另一个用于其他任何东西


#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。我能做点什么吗,还是我的方法完全错了?

最终取决于intstring之间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
};

最新更新