У меня есть база данных, которая имеет 4 типа индексов. Каждый тип индекса имеет порядок сортировки. То есть, если вы знаете тип статического индекса, то есть один правильный функтор для сортировки объектов в этом индексе, и он также известен, как только вы знаете тип индекса, то есть статически во время компиляции.C++ Транспортировка данных условного типа времени выполнения
В базе данных есть функция, которая содержит оператор переключения времени выполнения для определения того, с каким индексом нужно разговаривать. Я хотел бы, чтобы эта функция возвращала информацию о времени выполнения из индекса (главным образом, итераторы), но также и тип статического порядка использования.
Чтобы показать намерение, вот какой-то псевдокод. Он не работает, так как ... может быть использована специальная спецификация шаблона для записи getLookupInfo (тип возврата будет полиморфным). Примечание. Я не хочу использовать виртуальные машины.
template <typename Iterator, typename Order>
struct LookupInfo {
typedef Order order;
uint64_t cost;
Iterator it1, it2, it3, it4;
};
LookupInfo Database::getLookupInfo(LookupData data)
{
if (data == ....) {
return LookupInfo<Iterator1, Order1>();
}
return LookupInfo<Iterator2, Order2>();
}
some_function(LookupInfo lookup_info) {
vector<Record> records(lookup_info.begin(), lookup_info.end());
sort(records.begin(), records.end(), lookup_info::order());
}
Что-то вроде этого возможно?
Мне любопытно, как вы ожидаете, что 'getLookupInfo' будет работать. Я не понимаю, как это можно назвать. Операторы return не соответствуют типу return, что означает, что вам понадобится полиморфизм или специализация шаблонов. – AndyG
Энди - да - вот где я не могу закрыть цикл. Фрагмент кода не будет работать, он больше предназначен, чтобы показать, что я хотел бы сделать. И вы правы, трюк каким-то образом должен сделать возвращаемый тип getLookupInfo возвращать мне другой тип каждый раз. Однако я не хочу виртуальных, поэтому я хотел бы использовать специализированную специализацию. Но даже это ИМХО сложно. Суть моего вопроса, вероятно: как я могу использовать специализированную специализацию для записи getLookupInfo? – Frank
Трюк состоит в том, чтобы превратить все в тип ... Я могу помочь, если вы дадите мне какой-нибудь псевдокод, как вы его хотели бы назвать (без специализации шаблонов). – AndyG