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++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...