我試圖重載Python包裝的算術運算符。實現:模板<ClassDerivingFromBase,不>
我包裝我的Python原語帶:
class Float : Object { ... };
class Long : Object { ... };
:
我試圖:
Float F{3.14};
cout << F+3; // <-- overload F+3 by promoting 3, so F+Float{3}
同樣,
Long L{100};
cout << L+1; // L+Long{1}
在所有這些情況下,左操作數導出來自對象,而正確的不是。
是否有可能建立一個單一的模板功能,有效地做:
template< <DerivedFromBase, Not>
operator + (DerivedFromBase der, Not x) {
return der + DerivedFromBase{x};
}
即它僅捕獲其中左操作數從Object派生的情況,而右邊的一個沒有。
它將右操作數提升爲與左邊相同的類型。
然後der + DerivedFromBase{x}
調用將在DerivedFromBase中定義的+運算符。
也許作爲illy的問題,但爲什麼你在這種情況下使用初始化列表? – 2014-12-03 08:54:02
so'template :: value &&!std :: is_base_of