мне было интересно, если бы мы могли принять тип данных на входе динамически во время выполнения, используя дженерики ...
.... мы хотим упорядочить некоторые данные, и мы не знаем, тип ввода, который задан до руки ...
Нет, вы не можете сделать это с помощью шаблонов на C++ (предположил, что вы имели в виду шаблоны, когда вы сказали дженерики).
C++ шаблоны - это языковая функция, которая позволяет неопределенным типам кода, пока код, который их использует, не скомпилирован. То есть, шаблоны C++ - это функция компиляции.
Если все типы, участвующие, известны к моменту компиляции кода, то вы можете использовать шаблоны C++. В примере сортировки, если вы знаете точные типы данных, которые нужно отсортировать, можно использовать что-то вроде the std::sort()
function.
Если вы не можете определить точные типы объектов до времени выполнения (что, по-видимому, описывает ситуацию), то следует использовать полиморфизм через функции virtual
. Использование сортировки примера, вы можете иметь базовый класс, как это:
class SortableInput
{
public:
virtual bool IsLessThan(SortableInput& rhs) = 0;
};
Тогда ваши различные типы могут извлечь из него:
class SortableItemA : public SortableInput
{
public:
virtual bool IsLessThan(SortableInput& rhs) { /* */ }
};
class SortableItemB : public SortableInput
{
public:
virtual bool IsLessThan(SortableInput& rhs) { /* */ }
};
// ...
Тогда ваша функция сортировки будет иметь только знать о SortableInput
. Конечно, это действительно имеет смысл, если SortableItemA
можно сравнить с SortableItemB
.
На каком языке? Ответы на C, C++ и Java могут быть очень разными. –
не уверен, что я понимаю вопрос, но не так ли, что такое Java Array.sort (Object [], компаратор)? –
Я хочу знать, можно ли это сделать на C/C++ .. Отредактировано :) – neelima