将1D或2D向量传递给同一类的构造函数
Pass 1d or 2d vector to constructor of same class
我即将创建类,处理双打的2D向量。我想将向量的向量传递,或者将双打的简单向量(如果第二维为1个元素(到构造函数。另外,它是用于编辑基础数据的模态对话框,因此,我是通过参考传递向量的。
一些代码以参考我要实现的目标:
class TableEditDialog {
using Table2d = std::vector<std::vector<double>>;
public:
TableEditDialog(Table2d & data) : m_data( data ) {}
TableEditDialog(std::vector<double> & data); // ?
private:
Table2d& m_data;
};
如果通过n个元素传递了简单的双重向量,我需要 m_data
是 vector<vector<double>>
,它包含一个元素的n个向量,或一个元素的一个向量。
我试图在没有成功的情况下使用委派构造函数。另外,我尝试在第二个构造函数中创建新的临时2D向量,但是它打破了通过参考来编辑基础数据传递的想法。
使TableEditDialog
成为类模板,以便可以在构造时指定类型。
template<class T>
class TableEditDialog {
public:
TableEditDialog(T& data) : m_data( data ) {}
private:
T& m_data;
};
您还可以发挥功能来帮助类型扣除:
template<class T>
TableEditDialog<T> make_table_edit_dialog(T& data) {
return data;
}
然后您可以做:
std::vector<double> d1d;
std::vector<std::vector<double>> d2d;
auto ted1 = make_table_edit_dialog(d1d);
auto ted2 = make_table_edit_dialog(d2d);
编辑:
如果您想将1D数组案例转换为2D数组,则可以通过将向量复制到其中来初始化1D向量的构造函数,并初始化m_data
:
class TableEditDialog {
using Array1d = std::vector<double>;
using Array2d = std::vector<Array1d>;
public:
TableEditDialog(Array2d& data) : m_data( data ) {}
TableEditDialog(Array1d& data) : m_data(1, data) {}
private:
Array2d m_data;
};
您可以将1D向量转换为2D向量存储元素的参考。这种解决方案的唯一缺点是,您不允许使用此1D向量直到完成编辑,其他地方可能会破裂。
这是示例:
TableEditDialog(std::vector<double> & data) {
std::vector<std::vector<std::reference_wrapper<double>>> result(data.size());
std::transform(data.begin(), data.end(), result.begin(), [](double& d) {return {{d}};});
}
不过,我没有测试过,也许您需要在lambda中使用{{std::forward(d)}}
。
剩下的唯一问题是您对M_DATA的定义不同,但是相同的访问语义,因此您要么需要使用模板代码访问它,要么使用STD :: variant。
相关文章:
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 将1D或2D向量传递给同一类的构造函数
- 让构造函数在其初始化列表中调用同一类的另一个构造函数是否有效
- 在C++中,类是否可以包含指向构造函数中初始化的同一类的指针?
- 为什么一个非平凡的成员需要为同一类中的匿名联合定义构造函数
- 如何在类构造函数内部对同一类的成员函数启动pthread
- 同一类的各种明确构造函数
- 从同一类的另一个构造函数调用构造函数
- 为什么在同一类中使用不同的(共享_ptr和正常)指针构造函数,我会得到不同的结果
- 用参数初始化另一类构造函数中的对象
- 一个嵌入在另一类 构造函数中的一个类的对象数组
- 不能从同一类的另一个构造函数调用具有所有默认参数的显式构造函数
- C++类构造函数使用指向同一类对象的指针
- C++是一个类的默认构造函数,调用另一类的另一个默认构造函数
- C++14从不同的构造函数(同一类)调用一个[具有不同参数]的构造函数
- 调用同一类中的另一个构造函数
- c++在同一类的另一个构造函数中调用构造函数
- 同一类的 C++ 扩展构造函数(无继承)
- 将类构造函数重载放在同一类的另一个重载中