我需要在std::less和std::greater模板之间进行选择,并将其中一个存储在另一个模板中(我认为我使用的是C++ STL vocab,对吗?)。我有这个:template<typename> class stSortOrder;stSortOrder = std::less;if(sortby == "descending") { stSortOrder = std::greater; }显然,它不会编译。我很确定这是因为我是STL的相对新手。 声明:我正在this thread(公共(public)成员函数的变体)中实现可接受的答案。这是我要避免在切换情况下重复的内容: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。这确实有助于减小代码大小。我已经考虑了发布的两个答案,但它们似乎都没有用-可能是因为我对模板不太熟悉,而我只是错误地使用了它们。 最佳答案 一个可以做:template <typename T>struct comparer{ comparer(bool is_less) : is_less(is_less) {} bool operator()(const T& x, const T& y) const { return is_less ? std::less<T>()(x, y) : std::greater<T>()(x, y); }private: bool is_less;};但我宁愿做(更清楚):template <typename T>struct comparer{ bool operator()(const T& a, const T& b) const { return is_less ? a < b : b < a; }private: bool is_less;};关于c++ - 复制/分配STL模板,std::less和std:greater,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7001009/
10-11 23:04
查看更多