Çok küçük sabit büyüklükteki vektörler ve matrisler üzerinde doğrusal cebir işlemleri için bazı sınıfları uygularım. CurrentY, var olduğunda:C++ otomatik tip dökümü: Bir kapsayıcı sınıfı için yanlış davranış
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;
sonra First = {2, 4, 6}
ve Second = {2.3, 4.3, 6.3}
, ikinci eleman derleyici tarafından birinci eleman türüne döküm olduğu için. Yerli C++ ile aynı tür otomatik döküm sağlamak için herhangi bir "kolay" yolu var mı: int + double = double, double + int = double?
Çok teşekkür ederim.
DÜZENLEME: Yanıtlardan verilen sözdizimi ile, operatör + çalışanı aldım. Ama aşağıdaki sözdizimini çalıştı ve derleme hatası ile başarısız: 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;
}
o sözdizimi sorunu nedir?
Büyük! + Operatörü için bu sözdizimi iyi çalışır ancak sınıf üyesi olması gereken diğer işlevler için kilitlenir. T sınıf türü olan bir sınıf üyesi işlevinin sözdizimi nedir ve TRHS geçirilen parametrenin türüdür? – Vincent
@Vincent buna göre cevabı düzenledi, görünüşe göre yorumlardaki kod bloklarını koyamazsınız. –
Çok teşekkür ederim. Özgün soruyu düzenledim, çünkü verilen kod parçasındaki sözdizimi hatasını göremiyorum ... – Vincent