我正在写一个矩阵类,我希望它能够存储任何不同的(数字)数据类型 - 从布尔到长。
为了访问数据我正在使用括号运算符。是否可以使该函数返回不同的数据类型,具体取决于类中存储的数据类型。更重要的是,我不完全确定如何在同一变量名下存储类中的不同数据类型。这可能是不可能的。
我认为将数据存储为任何类型的唯一方法是将其存储为void并将数据类型存储为额外变量。但是,作为一个空白返回会导致问题,不是吗?因为我想要返回我存储在函数中的数据类型。
感谢。
答案 0 :(得分:14)
阅读模板。
答案 1 :(得分:10)
你的答案是模板!
template <typename T>
class Matrix {
T* data;
public:
// ....
T& operator()( size_t x, size_t y )
{
return data[ y*MAXX + x ];
}
}
您可以阅读有关模板here。
的信息答案 2 :(得分:2)
如果矩阵的所有元素都是彼此相同的类型(即它是一个同质矩阵 - 所有所有整数或所有浮点数等),那么模板化方法是正确的方法。
但是,如果您希望能够存储异类型(即一些整数,一些浮点数等),那么您将不得不使用某种变体类型。一个很好的例子是boost的variant
实现。
您也可以使用union
,但您最终可能会编写variant
的大部分基础结构。