2012-11-08 47 views
0

有沒有辦法,我可以重載的「/」運算符的C + +推進載體?運算符重載提升ublas矢量

#include <boost/assign.hpp> 
#include <boost/numeric/ublas/vector.hpp> 
#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/operations.hpp> 
#include <boost/numeric/ublas/assignment.hpp> 

namespace ublas = boost::numeric::ublas; 


using namespace boost::assign; 

template <typename T, typename U> 
ublas::vector<T> operator/(U& var) 
{ 
// do something here 
return *this; 
} 

重載像 我看到錯誤「運營商/」必須是一個二元運算符(有1個參數)

回答

1

你擁有的運算符函數是一個獨立的功能,而不是一個類的成員,所以它需要兩個應該處理的對象的參數,因爲它不是類成員,所以它也沒有this

2

你需要的是這樣的:

#include <boost/assign.hpp> 
#include <boost/numeric/ublas/vector.hpp> 
#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/operations.hpp> 
#include <boost/numeric/ublas/assignment.hpp> 

namespace ublas = boost::numeric::ublas; 
using namespace boost::assign; 

template <typename T, typename U> 
ublas::vector<T> operator/(ublas::vector<T> v, U& var) 
{ 
    // your logic for/
    return v; 
} 


int main() 
{ 
    ublas::vector<int> v1; 
    auto v2 = v1/2; 
    return 0; 
} 
+0

感謝薩朗,我能得到它的工作。我有另一個問題。我嘗試將操作符定義複製到頭文件中並調用頭文件。它不太有效。我怎麼能組織這樣的所有運算符重載可以在一個頭,我只是將其包含在我的項目? '代碼」 模板 的uBLAS ::矢量運營商/(uBLAS庫::向量 V,U&VAR) { //你的邏輯/ 返回V; }'code' – Pat

+0

更新:我知道它的工作。我不得不將代碼轉儲到頭文件中,而不是在頭文件中定義運算符重載,並在cpp中定義其餘代碼。所以,只需將過載並將其直接轉儲到標題中即可。我不知道這是爲什麼起作用? – Pat