【发布时间】:2011-10-23 11:32:34
【问题描述】:
我需要在 std::less 和 std::greater 模板之间进行选择,并将其中一个存储在另一个模板中(我想我使用的是 C++ STL 词汇,对吧..?)。我有这个:
template<typename> class stSortOrder;
stSortOrder = std::less;
if(sortby == "descending")
{
stSortOrder = std::greater;
}
显然它不能编译。我很确定这是因为我是 STL 的新手。
澄清:
我正在实施this thread(公共成员函数的变体)中接受的答案。
这是我希望避免在 switch 案例中重复的内容:
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;
}
我想用一个已经根据排序顺序参数设置的模板替换 make_method_comparer 中的 std::less 和 std::greater。这将真的有助于减少代码大小。
我已经考虑了发布的两个答案,但它们似乎不起作用 - 可能是因为我对模板不太熟悉,而且我只是不正确地使用它们。
【问题讨论】: