在FLENS我想實現「自定義」存儲(也就是說,能夠提供指向實際數據的指針並負責存儲的內存管理)。FLENS的自定義存儲
管理其緩衝器A矩陣的定義如下,例如:
typedef flens::GeMatrix<flens::FullStorage<double, flens::ColMajor> > M;
後來,人們可以使用像這樣的矩陣:
M m1;
M m2;
M m3;
/* initialise the matrices */
m3 = m1 * m2;
爲了做同樣的事情與基質類型,它允許訪問內部緩衝區,例如,GhostStorage
只是實現了FullStorage的方式,並增加了一個init()
方法,該方法允許設置內部指針(完整實現過長,無法粘貼這裏):
void
init(IndexType numRows, IndexType numCols,
IndexType firstRow = I::defaultIndexBase,
IndexType firstCol = I::defaultIndexBase,
ElementType *p_data = NULL)
{
_data = p_data;
_numRows = numRows;
_numCols = numCols;
_firstRow = firstRow;
_firstCol = firstCol;
ASSERT(_numRows>=0);
ASSERT(_numCols>=0);
}
定義這樣的類型後:
typedef flens::GhostStorage<double, flens::ColMajor> GhostEng;
class MGhost : public flens::GeMatrix<GhostEng>
{
public:
void
init(IndexType numRows, IndexType numCols,
IndexType firstRow,
IndexType firstCol,
ElementType *p_data = NULL)
{
engine().init(numRows,numCols,firstRow,firstCol,p_data);
}
};
我期望與上述同樣的操作應該是可能的:
MGhost mg1;
MGhost mg2;
MGhost mg3;
/* initialise the matrices using the init() method */
mg3 = mg1 * mg2;
但是編譯器在這種情況下抱怨:
沒有已知的ar轉換gument 1從 '常量 flens :: MatrixClosure>, flens :: GeMatrix>>' 到 '常量MGhost &'
FLENS作者提供指導有關implementing your custom type of matrix,但我使用已定義的矩陣式在這裏 - flens::GeMatrix。
底線,問題是:如何在FLENS中實現一個矩陣,允許操縱內部緩衝區和高層交互,如m3 = m1 * m2
?
你好,傑克,謝謝你的回答。我發佈這個問題已經有一段時間了。我會研究它,並在那個時候將你的答案標記爲正確答案(或不答題)。信息+1。 – 2013-12-16 14:58:50