我有兩個類結構如下:重載操作符 - >當符*返回臨時
struct A {
A transform() const;
};
struct B {
// returns a temporary A
A operator*() const;
};
的*
操作可能看起來有點怪異這裏,但考慮到其使用的範圍實際上是很自然的。實際上,B
真的只存在於爲嵌入式語言提供一些合成糖,所以它的方法和操作符被設計爲給出期望的代碼外觀。鑑於B b
,得到了相關A
快,*b
。我有時想立即致電A
的變換。目前,這需要一些額外的括號(*b).transform()
。似乎有一種自然簡化,即b->transform()
。但operator ->
應該返回一個指針,operator *
是返回一個臨時的。我怎樣才能實現這樣的過載?
這是一個黑客,但你可以添加一個'A *運營商 - >(){返回此; ''到'A'。這是一個糟糕的黑客攻擊,但是你的'operator *'已經具有不同於內建運算符的語義,因爲它返回一個prvalue(不是左值)。 – dyp
@dyp然後我可以寫這樣的東西:'* b-> transform()'?這並不是太糟糕,只是在這種情況下,'A'是一個在許多項目中共享的庫中使用的類,我寧願不對它做些奇怪的事情。 「B」可能會很不直觀。 –
不,你會寫'B->變換()',[現場觀看(http://coliru.stacked-crooked.com/a/87bb2ef2ab2ca1a1)。你也可以從'B :: operator->'返回一箇中間類型,它具有這個成員'A * operator - >(){return/* something * /; }',其中'something'是一個數據成員。 – dyp