我正在爲非常小的常量大小的向量和矩陣實現一些線性代數運算的類。 Currenty,當我做:C++自動類型轉換:容器類的錯誤行爲
MyMathVector<int, 3> a ={1, 2, 3};
MyMathVector<double, 3> b ={1.3, 2.3, 3.3};
std::cout<<"First = "<<a+b<<std::endl;
std::cout<<"Second = "<<b+a<<std::endl;
然後First = {2, 4, 6}
和Second = {2.3, 4.3, 6.3}
,由於第二元件被澆鑄到由編譯器的第一個元素的類型。是否有任何「簡單」的方式來提供像本機C++一樣的自動投射:int + double = double,double + int = double?
非常感謝。
編輯: 隨着從答案給出的語法,我得到了運營商+工作。但我想下面的語法,以及編譯失敗,出現錯誤:expected a type, got ‘std::common_type<T, TRHS>::type’
#include <iostream>
#include <type_traits>
template<class T> class MyClass
{
public:
MyClass(const T& n) : _n(n) {;}
template<class TRHS> MyClass<typename std::common_type<T, TRHS>::type> myFunction(const MyClass<TRHS>& rhs)
{
return MyClass<std::common_type<T, TRHS>::type>(_n*2+rhs._n);
}
T _n;
};
int main()
{
MyClass<double> a(3);
MyClass<int> b(5);
std::cout<<(a.myFunction(b))._n<<std::endl;
}
什麼是語法的問題?
太好了!對於+運算符,此語法運行良好,但對於需要成爲類成員的其他函數而言,它會崩潰。什麼是類成員函數的語法,其中T是類類型,TRHS是傳遞參數的類型? – Vincent 2012-07-31 16:23:24
@Vincent相應地編輯了答案,顯然你不能在註釋中放置代碼塊。 – 2012-07-31 16:31:17
非常感謝。我編輯了原始問題,因爲我沒有看到提供的代碼段中的語法錯誤... – Vincent 2012-07-31 16:42:02