c ++ auto with overriding signed / unsigned

时间:2015-10-10 02:08:43

标签: c++ c++11 types armadillo

在以下代码中:

#include <armadillo>

using namespace arma;

int main()
{
    mat A;
    auto x=A.n_rows-5;
    ....

xlong long unsigned int,我希望它为long long int。我该如何解决这个问题?

应该注意的是,在此库的不同版本中,使用了不同的类型,因此我无法直接提及long long int,我需要使用auto

3 个答案:

答案 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类型特征库来获取数字类型的signedunsigned版本。

获得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);

为了抛弃无符号。