Мне нужно выбрать между шаблонами std :: less и std :: большее и сохранить один в другом шаблоне (я думаю, что я использую словарь C ++ STL, верно ..?). У меня есть это:
template<typename> class stSortOrder;
stSortOrder = std::less;
if(sortby == "descending")
{
stSortOrder = std::greater;
}
Очевидно, что он не компилируется. Я уверен, что это потому, что я относительный новичок в STL.
РАЗЪЯСНЕНИЯ:
Я реализую принятый ответ в этой теме (вариант для открытых функций-членов).
Вот что я хочу избежать в случае переключателя:
void CSubscriptionItem::sortMonitoredItems( int nColumnIndex, Qt::SortOrder ulOrder )
{
switch(nColumnIndex)
{
case CMonitoredItem::NAME:
{
if(ulOrder == Qt::DescendingOrder)
{
qSort( m_qlpcMonitoredItems.begin(),
m_qlpcMonitoredItems.end(),
make_method_comparer<std::less>(&CMonitoredItem::getName) );
}
else
{
qSort( m_qlpcMonitoredItems.begin(),
m_qlpcMonitoredItems.end(),
make_method_comparer<std::greater>(&CMonitoredItem::getName) );
}
break;
}
Я бы хотел заменить std :: less и std :: большее в make_method_comparer <> одним шаблоном, который уже настроен в зависимости от аргумента порядка сортировки. Это действительно поможет уменьшить размер кода.
Я рассмотрел оба опубликованных ответа, но, похоже, они не работают - скорее всего потому, что я не слишком знаком с шаблонами и просто неправильно их использую.