Изменяемый тип возвращаемых данных в C ++ - PullRequest
2 голосов
/ 18 декабря 2009

Я пишу матричный класс и хочу, чтобы он мог хранить любой другой (числовой) тип данных - от логического до длинного.

Для доступа к данным я использую оператор скобок. Можно ли заставить эту функцию возвращать разные типы данных в зависимости от того, какой тип данных хранится в классе. Более того, я не совсем уверен, как бы Я ХРАНИЛ различные типы данных в классе под одним и тем же именем переменной. Это вполне может быть невозможно.

Единственный способ сохранить данные любого типа - это сохранить их как пустые и сохранить тип данных в качестве дополнительной переменной. однако ВОЗВРАТ как пустота вызовет проблемы, нет? Потому что я хотел бы вернуться как тип данных, который я сохранил в функции.

Спасибо.

Ответы [ 3 ]

14 голосов
/ 18 декабря 2009

Читайте шаблоны.

10 голосов
/ 18 декабря 2009

Ваш ответ - шаблоны!

template <typename T>
class Matrix {
    T* data;
public:
    // ....
    T& operator()( size_t x, size_t y )
    {
        return data[ y*MAXX + x ]; 
    }

}

Вы можете прочитать о шаблонах здесь .

2 голосов
/ 18 декабря 2009

Если все элементы матрицы будут одного типа друг с другом (т.е. это однородная матрица - то есть все целые или все числа с плавающей запятой и т. Д.), То шаблонный подход - правильный путь.

Если, однако, вы хотите иметь возможность хранить гетерогенные типы (например, некоторые целые, некоторые числа с плавающей запятой и т. Д.), Вам придется использовать какой-то вариантный тип. Хорошим примером является реализация variant.

Вы также можете просто использовать union, но в любом случае вы, вероятно, в конечном итоге будете писать большую часть инфраструктуры variant.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...