2010-11-21 3 views
0

Hii,Динамический ввод данных типа ввода данных

Я написал общую функцию для сортировки, когда я столкнулся с этой идеей. Обычно мы даем данные и вызываем сортировку функции, которая написана в общем виде. Мне было интересно, можем ли мы принять динамический тип данных ввода во время выполнения с использованием дженериков.

Как, если мы хотим отсортировать некоторые данные, и мы не знаем тип ввода, который задан перед рукой. Таким образом, мы должны динамически вводить тип ввода данных и выполнять сортировку.

Возможно ли ... ???

+0

На каком языке? Ответы на C, C++ и Java могут быть очень разными. –

+0

не уверен, что я понимаю вопрос, но не так ли, что такое Java Array.sort (Object [], компаратор)? –

+0

Я хочу знать, можно ли это сделать на C/C++ .. Отредактировано :) – neelima

ответ

0

Да, если только somebody имел хотя that до ...

Сортировать алгоритмы в библиотеках, как правило, довольно общий характер. Вам просто нужно сказать им, как сравнивать ваши объекты.

0

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

.... мы хотим упорядочить некоторые данные, и мы не знаем, тип ввода, который задан до руки ...

Нет, вы не можете сделать это с помощью шаблонов на 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.

Смежные вопросы