В следующем коде у меня большой вектор с 10 членами, который можно разделить на 4 подвектора:
data[10]
P=data[0 to 2]
Q=data[3 to 5]
R=data[6 to 6]
S=data[7 to 9]
С, вектор R
только один член, я предпочитаю возвращать Rvalue непосредственно из data
, Я хочу сделать эту операцию над этим значением:
x.R()=1983.2+x.R();
как то, что я могу сделать с Q
, Но я получаю эту ошибку:
g++ -g -c main.cpp -std=c++11 -larmadillo -DNDEBUG
main.cpp: In member function ‘Super_vector::R_type&& Super_vector::R()’:
main.cpp:38:24: error: cannot bind ‘double’ lvalue to ‘Super_vector::R_type&& {aka double&&}’
return data(6,6);
^
main.cpp: In function ‘int main()’:
main.cpp:52:7: error: using xvalue (rvalue reference) as lvalue
x.R()=1983.2+x.R();
^
make: *** [all] Error 1
main.cpp
#include <armadillo>
#include <iostream>
using namespace std;
typedef arma::vec::fixed<10> x_vec;
class Super_vector
{
public:
x_vec data;
typedef decltype(std::declval<x_vec>().subvec(0, 2)) P_type;
typedef decltype(std::declval<x_vec>().subvec(3, 5)) Q_type;
typedef double R_type;
typedef decltype(std::declval<x_vec>().subvec(7, 9)) S_type;
Super_vector(x_vec data_) :
data(data_)
{
}inline P_type P()
{
return data.subvec(0,2);
}
inline Q_type Q()
{
return data.subvec(3,5);
}
inline R_type&& R()
{
return data(6,6);
}
inline S_type S()
{
return data.subvec(7,9);
}
};
int main()
{
Super_vector x({2,3,5,7,11,13,17,19,23,29});
x.Q()=-x.Q();
x.R()=1983.2+x.R();
x.data.print();
return 0;
}
Задача ещё не решена.
Других решений пока нет …