在以下代码中:
#include <armadillo>
using namespace arma;
int main()
{
mat A;
auto x=A.n_rows-5;
....
x
为long long unsigned int
,我希望它为long long int
。我该如何解决这个问题?
应该注意的是,在此库的不同版本中,使用了不同的类型,因此我无法直接提及long long int
,我需要使用auto
。
答案 0 :(得分:5)
由于您已经在使用犰狳,我认为最好(或最简单)的方法是使用arma::sword
。
sword x = A.n_rows - 5; // This can also compile without C++11.
它将解决“此库的不同版本,已使用不同类型”的问题,因为A.n_rows
的类型为arma::uword
,这是arma::sword
的无符号版本。请参阅http://arma.sourceforge.net/docs.html#uword
答案 1 :(得分:1)
您可以使用C ++ 11类型特征库来获取数字类型的signed或unsigned版本。
获得unsigned int:
std::make_unsigned<int>::type
为了获得A.n_rows
的签名版本,请尝试:
std::make_signed<decltype(A.n_rows)>::type x = A.n_rows - 5;
对于任何其他限定符,有相应的模板可在不同类型之间进行转换:
答案 2 :(得分:0)
更改
auto x=A.n_rows-5;
要
long long int x = (long long int)(A.n_rows - 5);
为了抛弃无符号。