2011-09-03 45 views
1

Boost ublas文檔讓我有點困惑。我認爲稀疏和密集的矩陣類共享一個共同的父類 - 我認爲這是一種設計。但是,如何設計一個可以接受稀疏矩陣或稠密矩陣的API,假設它只需要使用operator()訪問器對矩陣的條目進行操作。例如,類似這樣的東西:處理提升ublas稀疏或密集矩陣的API

float doMatrixMath(matrix_base<float> m) 
{ 
    return m(1,1)+m(2,2); 
} 

也許我對此的看法是錯誤的。任何有關如何思考ublas類的對象建模的指導將不勝感激!

回答

1

模板不幸。您可以使用一個非常通用的類型,或者挖掘並瞭解更具體的東西,但總的思路是:

template< typename MatrixType > 
float doMatrixMath(MatrixType m) 
{ 
    return m(1,1)+m(2,2); 
} 

當然,這可以用一個更具體類型和返回值的檢測來增強...

+0

我這麼認爲......雖然從某種角度來看,這更好,因爲當你調用m(1,1)時,你實際上不想虛擬方法發送。你能詳細說明你的類型檢測的觀點嗎? –