#include <vector>
#include <memory>
using namespace std;
class Base
{
public:
int getVal() { return 0; }
};
int getVal(shared_ptr<Base>& p)
{
return p->getVal();
}
int getVal(unique_ptr<Base>& p)
{
return p->getVal();
}
int getVal(int*& p)
{
return *p;
}
template <class Type>
bool writeRecordForSet(std::vector<Type>& entityPtr)
{
if (entityPtr.size() == 0)
return true;
//...
for (auto iter = entityPtr.begin(); iter != entityPtr.end(); iter++) {
int myval = getVal(*iter);
}
return true;
}
int main()
{
std::vector<std::shared_ptr<Base>> vec_shared;
std::vector<int*> vec_intp;
std::vector<std::unique_ptr<Base>> vec_unique_ptr;
writeRecordForSet(vec_shared);
writeRecordForSet(vec_intp);
writeRecordForSet(vec_unique_ptr);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1lbW9yeT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBCYXNlCnsKcHVibGljOgoJaW50IGdldFZhbCgpIHsgcmV0dXJuIDA7IH0KfTsKCmludCBnZXRWYWwoc2hhcmVkX3B0cjxCYXNlPiYgcCkKewoJcmV0dXJuIHAtPmdldFZhbCgpOwp9CgppbnQgZ2V0VmFsKHVuaXF1ZV9wdHI8QmFzZT4mIHApCnsKCXJldHVybiBwLT5nZXRWYWwoKTsKfQoKaW50IGdldFZhbChpbnQqJiBwKQp7CglyZXR1cm4gKnA7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVHlwZT4KYm9vbCB3cml0ZVJlY29yZEZvclNldChzdGQ6OnZlY3RvcjxUeXBlPiYgZW50aXR5UHRyKQp7CglpZiAoZW50aXR5UHRyLnNpemUoKSA9PSAwKQoJCXJldHVybiB0cnVlOwoJLy8uLi4KCWZvciAoYXV0byBpdGVyID0gZW50aXR5UHRyLmJlZ2luKCk7IGl0ZXIgIT0gZW50aXR5UHRyLmVuZCgpOyBpdGVyKyspIHsKCQlpbnQgbXl2YWwgPSBnZXRWYWwoKml0ZXIpOwoJfQoKCXJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpCnsKCXN0ZDo6dmVjdG9yPHN0ZDo6c2hhcmVkX3B0cjxCYXNlPj4gdmVjX3NoYXJlZDsKCXN0ZDo6dmVjdG9yPGludCo+IHZlY19pbnRwOwoJc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2U+PiB2ZWNfdW5pcXVlX3B0cjsKCXdyaXRlUmVjb3JkRm9yU2V0KHZlY19zaGFyZWQpOwoJd3JpdGVSZWNvcmRGb3JTZXQodmVjX2ludHApOwoJd3JpdGVSZWNvcmRGb3JTZXQodmVjX3VuaXF1ZV9wdHIpOwp9Cg==