【问题标题】:Vector of templated objects模板对象的向量
【发布时间】:2017-04-26 14:19:30
【问题描述】:

我正在开发一个使用模板化对象作为向量参数的项目。我必须严格使用对象和任何原始类型。我正在研究一个较小的例子来帮助我掌握更大的图景。

到目前为止,这是我所拥有的:

#include <iostream>
#include <vector>
using namespace std;

template <class T>
class Thing {
    public: 

        Thing(T type) {
            memVar = type;
        }

        T getMemVar() {
            return memVar;
        }

    private:
      T memVar;
};

class U {
    public:

        U(int i) {
            j = i;
        }

        int getJ () {
            return j;
        }

    private:

        int j;

};

int main() {
    // your code goes here
    vector < Thing <U> > v;

    v.push_back(); // idk how to add new elements to this vector.
                   // I've tried: v.push_back(Thing <U> i(U)),
                   //             v.push_back(U obj(4)), etc etc...

    return 0;
}

我不知道如何向这个向量添加元素。

【问题讨论】:

    标签: c++ templates object vector


    【解决方案1】:

    举例

    v.push_back(Thing<U>(4)); 
    

    如果你可以编译 C++11 或更高版本,那就更简单了

    v.emplace_back(4)
    

    但是,在这两种情况下,您都必须修改Thing的构造函数,如下所示

    Thing(T type) : memVar(type) {
    }
    

    或者在U中添加一个默认构造函数

    U () {
    }
    

    因为您的 Thing 构造函数尝试在不带参数的情况下初始化 memVar 并在 memVar 中复制 type

    【讨论】:

    • 有效!非常感谢您对此的见解。我花了 3 天的时间试图弄清楚这一点。我无法表达我的感激之情。
    • @TheoHandy - 不客气;如果您可以编译 C++11 或更高版本,则分析器得到了改进。
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2016-09-26
    • 2016-10-05
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    相关资源
    最近更新 更多