c++ - 初始化模板对象

标签 c++ templates

我有一个小问题... 我有这个模板类,它构成了一个二维数组:

template <typename T, unsigned P>

class mapa {
private:
    T **mat;
    unsigned tam;

public:
    mapa(T &dato);
    mapa(const mapa& orig);
    virtual ~mapa();
    mapa<T, P> &operator=(const mapa<T, P> &orig);
    T &operator()(unsigned i, unsigned j);
};

template <class T, unsigned P>
mapa<T, P>::mapa(T &dato) {
    tam = P;
    mat = new T**[tam];
    for (unsigned i = 0; i < P; i++) {
        mat[i] = new T*[tam];
        for (unsigned j = 0; j < P; j++) {
            mat[i][j] = dato;
        }
    }
}

template <class T, unsigned P>
mapa<T, P>::~mapa() {
    for (unsigned i = 0; i < tam; i++) {
        delete mat[i];
    }
    delete mat;
}

template <typename T, unsigned P>
T &mapa<T, P>::operator ()(unsigned i, unsigned j) {
    /*if (i < 0 || i >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    if (j < 0 || j >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    if (k < 0 || k >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    return mat[i][j][k];*/

}

template <typename T, unsigned P>
mapa<T, P> &mapa<T, P>::operator=(const mapa<T, P> &orig) {

    tam = orig.tam;
    mat = new T**[tam];
    for (unsigned i = 0; i < P; i++) {
        mat[i] = new T*[tam];
        for (unsigned j = 0; j < P; j++) {
            mat[i][j] = orig[i][j];
        }
    }
    return mat;
}

我想在下一个类中使用它:

class museo
{
    int sizeStep;
    mapa<objetoMuseo*, 50> mapaMuseo;

public:
    museo();
    ~museo();

    void visualizar();
};

如何让museo.cpp中的构造函数初始化模板对象?

最佳答案

您可以使用初始化列表来初始化您的字段。

museo::museo()
: sizeStep(0), 
  mapaMuseo(???)
{
}

当然在 ???您应该添加对 objectoMuseo 指针的引用,因为这是构造函数所需要的。

关于c++ - 初始化模板对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27324108/

相关文章:

c++ - 使用 numeric_limits 作为默认参数值

C++14 变量模板 : what is their purpose? 有任何用法示例吗?

c++ - 有没有更好的方法来实现 2-SUM 算法?

c++ - 防止cin、cout、cerr被实例化

c++ - C++ 中用于不可变数组的模板函数

javascript - Meteor Startup JQuery DOM 元素未就绪(JQueryUI 可拖动)

html - Liferay 7 Freemarker 模板。 staticUtil 已评估为 NULL 或缺失 - 尝试获取 JournalArticle 的类别

c++ - 在这种情况下要考虑的有效 C++ 数据结构

c# - 为什么我的 C++ Windows 窗体中有 C# 代码,而 C++ 函数弹出错误?

c++ - 递归删除二叉树中的每个节点