#include <boost/numeric/ublas/vector.hpp>
#include <iomanip>
#include <stdio.h>
namespace ublas = boost::numeric::ublas;
template <class T> class Vector
{
private:
ublas::vector<T> m_ublas_vec;
unsigned m_size;
public:
Vector(unsigned s){
m_size = s;
m_ublas_vec.resize(m_size);
}
T &operator () (unsigned idx) {
if(idx >= m_size){
perror("ERROR: Index out of bounds!\n");
exit(1);
}
}
// Right-multiply by scalar.
template <class TT, class S>
friend Vector<TT> operator * (const Vector<TT> &, S);
// Left multiply by scalar.
template <class TT, class S>
friend Vector<TT> operator * (S, const Vector<TT> &);
};
template <class T, class S>
Vector<T> operator * (const Vector<T> &v_in, S scalar){
Vector<T> v_out (v_in.m_size);
v_out.m_ublas_vec = v_in.m_ublas_vec*static_cast<T>(scalar);
return v_out;
}
template <class T, class S>
Vector<T> operator * (S scalar, const Vector<T> &v_in){
Vector<T> v_out (v_in.m_size);
v_out.m_ublas_vec = v_in.m_ublas_vec*static_cast<T>(scalar);
return v_out;
}
int main()
{
Vector<int> ss(4);
ss*2;
return 0;
}
I2luY2x1ZGUgPGJvb3N0L251bWVyaWMvdWJsYXMvdmVjdG9yLmhwcD4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxzdGRpby5oPgoKbmFtZXNwYWNlIHVibGFzID0gYm9vc3Q6Om51bWVyaWM6OnVibGFzOwoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFZlY3Rvcgp7CiAgICBwcml2YXRlOgoKICAgICAgIHVibGFzOjp2ZWN0b3I8VD4gbV91Ymxhc192ZWM7CiAgICAgICB1bnNpZ25lZCBtX3NpemU7CgogICAgcHVibGljOgoKICAgICAgIFZlY3Rvcih1bnNpZ25lZCBzKXsKICAgICAgICAgIG1fc2l6ZSA9IHM7CiAgICAgICAgICBtX3VibGFzX3ZlYy5yZXNpemUobV9zaXplKTsKICAgICAgIH0KCiAgICAgICBUICZvcGVyYXRvciAoKSAodW5zaWduZWQgaWR4KSB7CiAgICAgICAgICBpZihpZHggPj0gbV9zaXplKXsKICAgICAgICAgICAgIHBlcnJvcigiRVJST1I6IEluZGV4IG91dCBvZiBib3VuZHMhXG4iKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICAgLy8gUmlnaHQtbXVsdGlwbHkgYnkgc2NhbGFyLgogICAgICAgdGVtcGxhdGUgPGNsYXNzIFRULCBjbGFzcyBTPgogICAgICAgZnJpZW5kIFZlY3RvcjxUVD4gb3BlcmF0b3IgKiAoY29uc3QgVmVjdG9yPFRUPiAmLCBTKTsKCiAgICAgICAvLyBMZWZ0IG11bHRpcGx5IGJ5IHNjYWxhci4KICAgICAgIHRlbXBsYXRlIDxjbGFzcyBUVCwgY2xhc3MgUz4KICAgICAgIGZyaWVuZCBWZWN0b3I8VFQ+IG9wZXJhdG9yICogKFMsIGNvbnN0IFZlY3RvcjxUVD4gJik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUz4KVmVjdG9yPFQ+IG9wZXJhdG9yICogKGNvbnN0IFZlY3RvcjxUPiAmdl9pbiwgUyBzY2FsYXIpewogICBWZWN0b3I8VD4gdl9vdXQgKHZfaW4ubV9zaXplKTsKICAgdl9vdXQubV91Ymxhc192ZWMgPSB2X2luLm1fdWJsYXNfdmVjKnN0YXRpY19jYXN0PFQ+KHNjYWxhcik7CiAgIHJldHVybiB2X291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFM+ClZlY3RvcjxUPiBvcGVyYXRvciAqIChTIHNjYWxhciwgY29uc3QgVmVjdG9yPFQ+ICZ2X2luKXsKICAgVmVjdG9yPFQ+IHZfb3V0ICh2X2luLm1fc2l6ZSk7CiAgIHZfb3V0Lm1fdWJsYXNfdmVjID0gdl9pbi5tX3VibGFzX3ZlYypzdGF0aWNfY2FzdDxUPihzY2FsYXIpOwogICByZXR1cm4gdl9vdXQ7Cn0KCmludCBtYWluKCkKewogICAgVmVjdG9yPGludD4gc3MoNCk7CiAgICBzcyoyOwogICAgcmV0dXJuIDA7Cn0=