1
나는 내 자신의 표현식 템플릿 기반 C++ 행렬 클래스를 개발했습니다. I 읽거나 예로서 소자 매트릭스를 작성할 수 있도록 I 각각A (:, k) = b를 구현하는 것; C++ 매트릭스 라이브러리의 Matlab과 유사한 구문
cout << A(i,j) << endl;
및
A(i,j)=b;
를
()
연산자 과부하있다. 는 또한
Matrix
클래스는
template <typename OutType>
class Matrix
{
private:
int Rows_; //number of Rows
int Columns_; //number of Columns
OutType *data_; //row-major order allocation
public:
// --- Access operators
inline OutType & operator()(const int i, const int j) { return data_[IDX2R(i,j,GetColumns())]; }
inline OutType operator()(const int i, const int j) const { return data_[IDX2R(i,j,GetColumns())]; }
// --- SubExpressions - Range Range
inline Expr<SubMatrixExpr<const OutType*,OutType>,OutType> operator()(Range range1, Range range2)
{ typedef SubMatrixExpr<const OutType*,OutType> SExpr;
return Expr<SExpr,OutType>(SExpr(data_,Rows_,Columns_,range1.numelements_,range2.numelements_,range1.start_,range1.step_,range2.start_,range2.step_),
range1.numelements_,range2.numelements_);
}
}
로 예시
cout << A(Range(3,5),Range(0,10)) << endl;
템플릿
로 지금 로 matlab에 같은 할당을 사용 하시겠습니까 matlab에 같은 읽기를 가능하게하는Range
클래스를 구현
A(Range(3,5),Range(0,10))=B;
여기에서 B
은 적절한 매트릭스입니다.
는 I는 두 가지 가능성이
- 그것이 포인터 배열을 반환되도록
()
연산자 과부하하고되도록=
연산자 과부하 될 상기 Matlab의 유사한 구문을 달성 할 것으로 생각 후자는 포인터 배열과Matrix
사이에서 작용할 수 있습니다. - 은 위에 표시된
()
연산자의 오버로드를 이용하고=
연산자를 오버로드하여 표현식과Matrix
사이에서 작용할 수 있습니다.
아마도 매우 큰 매트릭스의 경우 첫 번째 옵션이 매우 편리하지 않을 수 있습니다. 맞습니까? 더 정교한 C++ 기능 (예 : 의미 이동)을 사용하여보다 효율적이고 효과적인 다른 가능성이 있습니까?
도움 주셔서 감사합니다.