#include <iostream>
#include <vector>
template<class T>
class vector_ref
{
public:
vector_ref(T *pData, int pN) {Data = pData; N = pN;};
T *Data;
int N;
vector_ref<T>& operator=(const std::vector<T> &v1)
{
for(int ii = 0; ii < N; ii++)
{
Data[ii] = v1[ii];
}
return *this;
}
std::vector<T> operator() ()
{
std::vector<T> v1(N);
for(int ii = 0; ii < N; ii++)
{
v1[ii] = Data[ii];
}
return v1;
}
// std::vector<T>& operator ()()
// {
// std::vector<T> v1(N);
// for(int ii = 0; ii < N; ii++)
// {
// v1[ii] = Data[ii];
// }
// return v1;
// }
// std::vector<T> tostring()
// {
// std::vector<T> v1(N);
// }
};
template<class T>
void printVec(std::vector<T> v1)
{
for(int ii = 0; ii < v1.size(); ii++)
{
std::cout << v1[ii] << std::endl;
}
}
int main()
{
std::vector<double> v,s;
v.push_back(1.0);
v.push_back(2.0);
v.push_back(3.0);
vector_ref<double> v_ref(&v[0],3);
//s=v_ref.operator();
printVec(v_ref()); // Compiler error
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgdmVjdG9yX3JlZgp7CnB1YmxpYzoKICAgIHZlY3Rvcl9yZWYoVCAqcERhdGEsIGludCBwTikge0RhdGEgPSBwRGF0YTsgTiA9IHBOO307CiAgICBUICpEYXRhOwogICAgaW50IE47CiAgICB2ZWN0b3JfcmVmPFQ+JiBvcGVyYXRvcj0oY29uc3Qgc3RkOjp2ZWN0b3I8VD4gJnYxKQogICAgewogICAgICAgIGZvcihpbnQgaWkgPSAwOyBpaSA8IE47IGlpKyspCiAgICAgICAgewogICAgICAgICAgICBEYXRhW2lpXSA9IHYxW2lpXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgIHN0ZDo6dmVjdG9yPFQ+IG9wZXJhdG9yKCkgKCkKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxUPiB2MShOKTsKICAgICAgICBmb3IoaW50IGlpID0gMDsgaWkgPCBOOyBpaSsrKQogICAgICAgIHsKICAgICAgICAgICAgdjFbaWldID0gRGF0YVtpaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiB2MTsKICAgIH0KICAgIC8vIHN0ZDo6dmVjdG9yPFQ+JiBvcGVyYXRvciAoKSgpCiAgICAvLyB7CiAgICAgICAgLy8gc3RkOjp2ZWN0b3I8VD4gdjEoTik7CiAgICAgICAgLy8gZm9yKGludCBpaSA9IDA7IGlpIDwgTjsgaWkrKykKICAgICAgICAvLyB7CiAgICAgICAgICAgIC8vIHYxW2lpXSA9IERhdGFbaWldOwogICAgICAgIC8vIH0KICAgICAgICAvLyByZXR1cm4gdjE7CiAgICAvLyB9CiAgICAvLyBzdGQ6OnZlY3RvcjxUPiB0b3N0cmluZygpCiAgICAvLyB7CiAgICAgICAgLy8gc3RkOjp2ZWN0b3I8VD4gdjEoTik7CiAgICAKICAgIC8vIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CnZvaWQgcHJpbnRWZWMoc3RkOjp2ZWN0b3I8VD4gdjEpCnsKICAgIGZvcihpbnQgaWkgPSAwOyBpaSA8IHYxLnNpemUoKTsgaWkrKykKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgdjFbaWldIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHYsczsKICAgIHYucHVzaF9iYWNrKDEuMCk7CiAgICB2LnB1c2hfYmFjaygyLjApOwogICAgdi5wdXNoX2JhY2soMy4wKTsKCiAgICAKICAgIHZlY3Rvcl9yZWY8ZG91YmxlPiB2X3JlZigmdlswXSwzKTsKICAgIC8vcz12X3JlZi5vcGVyYXRvcigpOwogICBwcmludFZlYyh2X3JlZigpKTsgLy8gQ29tcGlsZXIgZXJyb3IKCiAgICByZXR1cm4gMDsKfQ==