C++如何调用模板的类构造函数

C++ how call template's class constructor

本文关键字:构造函数 调用 何调用 C++      更新时间:2023-10-16

我有这样一段代码:

template <class T>
struct Rgb
{
    T *r, *g, *b;
    Rgb(int nr, int ng, int nb)
    {
        r = new T(nr);
        g = new T(ng);
        b = new T(nb);
    }
    Rgb(int n)
    {
        Rgb(n, n, n);
    }
    ~Rgb()
    {
        delete r;
        delete g;
        delete b;
    }
};

我以这种方式做到了这一点,因为我希望能够创建以下对象:

    Rgb<std::vector<int>> a(10); // so it creates 3 vectors inside,
        // each with 10 elements or
    Rgb<std::deque<double>> a(2, 5, 4); // so it creates 3 deques inside
        // with different sizes

但是我上面给出的实现不起作用。请帮帮我...谢谢。。。

如果你的

编译器支持构造函数委托(例如Clang 3.2),你可以执行以下操作:

    Rgb(int n) : Rgb(n, n, n)
    {
    }

您正在做的是在构造函数中构造一个临时 Rgb 实例,一旦删除未初始化的 rgb,该实例就会失败。

否则,我建议创建一个执行初始化的通用init函数,或者简单地复制代码。正如评论所指出的那样,您不应该在这里使用new(这几乎总是现代C++代码中的代码气味)。将两者整合在一起:

template <class T>
struct Rgb
{
    T r, g, b;
    Rgb(int nr, int ng, int nb) : r(nr), g(ng), b(nb)
    { }
    Rgb(int n) : r(n), g(n), b(n)
    { }
    ~Rgb()
    { }
};