C自动类型转换:容器类的错误行为

前端之家收集整理的这篇文章主要介绍了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;
}

那个语法有什么问题?

解决方法

使用std :: common_type:
template <std::size_t s,typename L,typename R>
MyMathVector<typename std::common_type<L,R>::type,s> operator+(MyMathVector<L,s> const& l,MyMathVector<R,s> const& r)
{
    // do addition
}

在成员函数的情况下(在类体中,T和s是可见的):

template <typename TRHS>
MyMathVector<typename std::common_type<T,TRHS>::type,s> operator+(MyMathVector<TRHS,s> const& rhs) const
{
    // do addition
}

猜你在找的C&C++相关文章