1
下面的例子定義了一個基本podtype容器類過載。然後使用這個類創建一系列代表基本podtype的OOP版本的類型定義。當我們開始將這些類型分配給另一個時,問題就產生了。C++模板操作者與不同類型的
我試圖界定操作與使用普通PodObjects類型但沒有任何更迭LHS和rhs參數朋友方法。有沒有人可能經歷過類似的事情或知道其他解決方案。
在此先感謝。
#include <stdint.h>
template <typename T>
class PodObject {
protected:
T _value;
public:
PodObject<T>(int rhs) {
this->_value = static_cast<T>(rhs);
}
PodObject<T> operator+= (PodObject<T> const &rhs){
this->_value = rhs._value;
return *this;
}
};
typedef PodObject<int8_t> Int8;
typedef PodObject<int16_t> Int16;
int main() {
Int16 a = 10;
Int8 b = 15;
a += b; // Source of problem
return 0;
}
導致編譯器輸出:
example.cpp:26:11: error: no viable overloaded '+='
a += b;
~^~
example.cpp:13:22: note: candidate function not viable: no known conversion from 'Int8' (aka 'PodObject<int8_t>') to 'const PodObject<short>'
for 1st argument
PodObject<T> operator+= (PodObject<T> const &rhs){
編輯:
下朋友的方法不適合我的工作:
template<typename U, typename W>
friend PodObject<U> operator+= (PodObject<U> &lhs, PodObject<W> const &rhs) {
lhs._value += rhs._value;
return lhs;
}
+1 「沒有意義,沒有用處」。 – 2012-04-14 12:20:32
這是更多的一個實驗,而不是一個理智的,是的,我會去這個程序員地獄:)。但是,謝謝你的回答,然而這個成員變量需要公開才能工作。 – Roy 2012-04-14 12:23:27
如果您使'PodObject'的朋友彼此成員,則成員變量不需要是'public':'template朋友PodObject ;'P.S.如果你真的提供這個代碼,你只能去程序員的地獄。 –
2012-04-14 12:26:24