是否有可能創建一個函數,該函數接受任何可想象的類型的元素列表並返回可用作排序元素的比較器的運算符?換句話說,是否可以創建一個通用元素列表的排序?
template typename<T> ??? getComparator (T a)
{
// ...
}
這裏我把???
,因爲我不知道返回類型是什麼。這個想法,但是,如果我叫
getComparator(int i)
它可能會返回
bool smallerThan(int a, int b) { return (a < b); }
,如果我創建了一個自定義對象
struct thingamabob { int i; std::string s; int ***** ptr; }
thingamabob myThing;
我可以養活myThing
爲getComparator
,它將弄清楚如何創建一個返回類型爲bool
的函數,該函數需要兩個myThing
類型的對象,並且對於任何3個對象都是這樣的
thingamabob thing1, thing2, thing3;
與
thing1 != thing2 && thing2 != thing3 && thing1 != thing3
話,我可以得到一些<
使得或者
thing1 <= thing2 && thing2 <= thing3
或
thing1 <= thing3 && thing3 <= thing2
或
thing3 <= thing1 && thing1 <= thing2
或
thing2 <= thing1 && thing1 <= thing3
或
thing2 <= thing3 && thing3 <= thing1
或
thing3 <= thing1 && thing1 <= thing2
或
thing3 <= thing2 && thing2 <= thing3
引用的建議沒有產生比較運營商的任意類型。例如,帶有指針成員的類型被排除。 – rici
@rici是的,這實際上是非常好的:比較屬於不同內存塊的指針就是UB。 – stefan
當然,我明白理由。這只是一個澄清,因爲OP是關於任意對象的。 – rici