mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-30 17:40:05 +08:00
Use Eigen::fix<N> to pass compile-time sizes.
This commit is contained in:
parent
24409f3acd
commit
83d6a529c3
@ -13,7 +13,7 @@
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
/** \class Reshapedd
|
||||
/** \class Reshaped
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* \brief Expression of a fixed-size or dynamic-size reshape
|
||||
@ -23,27 +23,24 @@ namespace Eigen {
|
||||
* \tparam Cols the number of columns of the reshape we are taking at compile time (optional)
|
||||
* \tparam Order
|
||||
*
|
||||
* This class represents an expression of either a fixed-size or dynamic-size reshape. It is the return
|
||||
* type of DenseBase::reshaped(Index,Index) and DenseBase::reshape<int,int>() and
|
||||
* This class represents an expression of either a fixed-size or dynamic-size reshape.
|
||||
* It is the return type of DenseBase::reshaped(NRowsType,NColsType) and
|
||||
* most of the time this is the only way it is used.
|
||||
*
|
||||
* However, if you want to directly maniputate reshape expressions,
|
||||
* However, in C++98, if you want to directly maniputate reshaped expressions,
|
||||
* for instance if you want to write a function returning such an expression, you
|
||||
* will need to use this class.
|
||||
* will need to use this class. In C++11, it is advised to use the \em auto
|
||||
* keyword for such use cases.
|
||||
*
|
||||
* Here is an example illustrating the dynamic case:
|
||||
* \include class_Reshaped.cpp
|
||||
* Output: \verbinclude class_Reshaped.out
|
||||
*
|
||||
* \note Even though this expression has dynamic size, in the case where \a XprType
|
||||
* has fixed size, this expression inherits a fixed maximal size which means that evaluating
|
||||
* it does not cause a dynamic memory allocation.
|
||||
*
|
||||
* Here is an example illustrating the fixed-size case:
|
||||
* \include class_FixedReshaped.cpp
|
||||
* Output: \verbinclude class_FixedReshaped.out
|
||||
*
|
||||
* \sa DenseBase::reshaped(Index,Index), DenseBase::reshaped(), class VectorReshaped
|
||||
* \sa DenseBase::reshaped(NRowsType,NColsType)
|
||||
*/
|
||||
|
||||
namespace internal {
|
||||
|
@ -17,30 +17,53 @@
|
||||
///
|
||||
/// \sa class Reshaped, fix, fix<N>(int)
|
||||
///
|
||||
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename NRowsType, typename NColsType, typename OrderType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Reshaped<Derived,...>
|
||||
reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder);
|
||||
|
||||
/** This is the const version of reshaped(NRowsType,NColsType). */
|
||||
template<typename NRowsType, typename NColsType, typename OrderType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Reshaped<const Derived,...>
|
||||
reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder) const;
|
||||
#else
|
||||
template<typename NRowsType, typename NColsType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
inline Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>
|
||||
#else
|
||||
inline Reshaped<Derived,...>
|
||||
#endif
|
||||
reshaped(NRowsType nRows, NColsType nCols)
|
||||
{
|
||||
return Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>(
|
||||
derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols));
|
||||
}
|
||||
|
||||
/** This is the const version of reshaped(NRowsType,NColsType). */
|
||||
template<typename NRowsType, typename NColsType, typename OrderType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>
|
||||
reshaped(NRowsType nRows, NColsType nCols, OrderType)
|
||||
{
|
||||
return Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>(
|
||||
derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols));
|
||||
}
|
||||
|
||||
|
||||
template<typename NRowsType, typename NColsType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
inline const Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>
|
||||
#else
|
||||
inline const Reshaped<const Derived,...>
|
||||
#endif
|
||||
reshaped(NRowsType nRows, NColsType nCols) const
|
||||
{
|
||||
return Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>(
|
||||
derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols));
|
||||
}
|
||||
|
||||
template<typename NRowsType, typename NColsType, typename OrderType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>
|
||||
reshaped(NRowsType nRows, NColsType nCols, OrderType) const
|
||||
{
|
||||
return Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>(
|
||||
derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols));
|
||||
}
|
||||
|
||||
#endif // EIGEN_PARSED_BY_DOXYGEN
|
||||
|
@ -4,10 +4,10 @@ using namespace Eigen;
|
||||
using namespace std;
|
||||
|
||||
template<typename Derived>
|
||||
Eigen::Reshape<Derived, 4, 2>
|
||||
Eigen::Reshaped<Derived, 4, 2>
|
||||
reshape_helper(MatrixBase<Derived>& m)
|
||||
{
|
||||
return Eigen::Reshape<Derived, 4, 2>(m.derived());
|
||||
return Eigen::Reshaped<Derived, 4, 2>(m.derived());
|
||||
}
|
||||
|
||||
int main(int, char**)
|
@ -4,10 +4,10 @@ using namespace std;
|
||||
using namespace Eigen;
|
||||
|
||||
template<typename Derived>
|
||||
const Reshape<const Derived>
|
||||
const Reshaped<const Derived>
|
||||
reshape_helper(const MatrixBase<Derived>& m, int rows, int cols)
|
||||
{
|
||||
return Reshape<const Derived>(m.derived(), rows, cols);
|
||||
return Reshaped<const Derived>(m.derived(), rows, cols);
|
||||
}
|
||||
|
||||
int main(int, char**)
|
||||
@ -17,7 +17,7 @@ int main(int, char**)
|
||||
2, 5, 8, 11,
|
||||
3, 6, 9, 12;
|
||||
cout << m << endl;
|
||||
auto n = reshape_helper(m, 2, 6);
|
||||
Ref<const MatrixXd> n = reshape_helper(m, 2, 6);
|
||||
cout << "Matrix m is:" << endl << m << endl;
|
||||
cout << "Matrix n is:" << endl << n << endl;
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
Matrix4i m = Matrix4i::Random();
|
||||
cout << "Here is the matrix m:" << endl << m << endl;
|
||||
cout << "Here is m.reshape(fix<2>,fix<8>):" << endl << m.reshape(fix<2>,fix<8>) << endl;
|
||||
cout << "Here is m.reshape(fix<2>,fix<8>):" << endl << m.reshaped(fix<2>,fix<8>) << endl;
|
||||
|
@ -1,3 +1,3 @@
|
||||
Matrix4i m = Matrix4i::Random();
|
||||
cout << "Here is the matrix m:" << endl << m << endl;
|
||||
cout << "Here is m.reshape(2, 8):" << endl << m.reshape(2, 8) << endl;
|
||||
cout << "Here is m.reshape(2, 8):" << endl << m.reshaped(2, 8) << endl;
|
||||
|
Loading…
Reference in New Issue
Block a user