C ++中的可更改返回数据类型

时间:2009-12-18 18:49:29

标签: c++ templates

我正在写一个矩阵类,我希望它能够存储任何不同的(数字)数据类型 - 从布尔到长。

为了访问数据我正在使用括号运算符。是否可以使该函数返回不同的数据类型,具体取决于类中存储的数据类型。更重要的是,我不完全确定如何在同一变量名下存储类中的不同数据类型。这可能是不可能的。

我认为将数据存储为任何类型的唯一方法是将其存储为void并将数据类型存储为额外变量。但是,作为一个空白返回会导致问题,不是吗?因为我想要返回我存储在函数中的数据类型。

感谢。

3 个答案:

答案 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的大部分基础结构。