簡體   English   中英

包含boost :: numeric :: ublas :: matrix的類的運算符重載

[英]Operator overloading for a class containing boost::numeric::ublas::matrix

我有一個具有提升矩陣作為私有成員變量的類模板。 構造時,矩陣數據類型由類類型確定。 此類具有一個成員函數,該成員函數應該向成員矩陣添加一個常量。 該常數與矩陣數據類型一致。 我在編寫重載運算符時遇到麻煩,該運算符將為任意常數值返回更新的成員矩陣。 當前,另一個成員函數執行此添加。 我的代碼如下:

/*content from main.cpp compiled with `g++ -o main main.cpp` */
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace boost::numeric::ublas;
using namespace std;

template <typename T>
class MTool
{
private:
matrix<T> m_ME;

public: 
MTool(int N, int M) { m_ME.resize(M, N); } // constructor
~MTool() { m_ME.clear(); } // destructor
void PutMatValues(); // insert values into member matrix
void AddConst(const T &k) { m_ME+=k; } // add a constant to member matrix 
void PrintMat() { cout << "The ME " << endl << m_ME << endl; } // print the member matrix

// overloaded operator function
matrix<T> operator+ <> (const T& kvalue) { return (m_ME+kvalue); }  
};

template<typename T>
void MTool<T>::PutMatValues()
{
    for (unsigned row=0; row<m_ME.size1(); row++)
        for (unsigned col=0; col<m_ME.size2(); col++)   
            m_ME(row,col)=static_cast<T> (row*col);
} 

int main()
{
    MTool<double> mymat(5, 3); 
    double dk=123.67001;

    mymat.PutMatValues();   
    mymat.PrintMat();
    mymat.AddConst(dk);
    mymat.PrintMat();

    return 0; 
} 

我得到的一些編譯器錯誤是

錯誤:主模板的聲明中的template-id'operator + <>'

錯誤:'(((MTool *)this)-> MTool :: m_ME + = k'中的'operator + ='不匹配

對於C ++模板和類,我是相當陌生的人,並且肯定我的方法中缺少一些基本知識。 任何建議將不勝感激。

第一個只是語法錯誤,該成員operator +將寫為

MTool<T> operator+ (const T& kvalue) const { ...

盡管將二進制加號運算符視為成員函數在某種程度上很不尋常:它幾乎總是作為非成員實現的,因此您可以編寫表達式c + M以及M + c

第二個錯誤只是指出boost::numeric::ublas::matrix沒有帶標量參數的operator+= 也沒有operator+可以添加矩陣和標量,因此運算符+中的表達式m_ME+kvalue也不會編譯。

僅在相等形狀的矩陣之間定義加法。 如果要將標量添加到矩陣的每個元素,則需要編寫如下代碼:

void AddConst(const T &k) {
    for(auto& element : m_ME.data())
           element += k;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM