#include <vector>
struct Test
{
int MyField = 0;
};
template<class Container, typename T>
class CContainerP
{
Container m_c;
public:
template<typename TpRefValue, class F>
bool findElement(TpRefValue &refValue, F f, const T* &elem) const
{
for (auto it = m_c.begin(); it != m_c.end(); ++it)
{
auto element = *it;
if (element->*f == refValue)
{
elem = element;
return true;
}
}
return false;
}
};
int main()
{
CContainerP<std::vector<Test*>, Test> o;
int iRef = 0;
const Test *p = nullptr;
bool bFound = o.findElement(iRef, &Test::MyField, p);// не компилируется
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KCnN0cnVjdCBUZXN0CnsKCWludCBNeUZpZWxkID0gMDsKfTsKCnRlbXBsYXRlPGNsYXNzIENvbnRhaW5lciwgdHlwZW5hbWUgVD4KY2xhc3MgQ0NvbnRhaW5lclAKewogICAgQ29udGFpbmVyIG1fYzsKcHVibGljOgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVHBSZWZWYWx1ZSwgY2xhc3MgRj4KICAgIGJvb2wgZmluZEVsZW1lbnQoVHBSZWZWYWx1ZSAmcmVmVmFsdWUsIEYgZiwgY29uc3QgVCogJmVsZW0pIGNvbnN0CiAgICB7CiAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9jLmJlZ2luKCk7IGl0ICE9IG1fYy5lbmQoKTsgKytpdCkKICAgICAgICB7CiAgICAgICAgICAgIGF1dG8gZWxlbWVudCA9ICppdDsKICAgICAgICAgICAgaWYgKGVsZW1lbnQtPipmID09IHJlZlZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBlbGVtID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgQ0NvbnRhaW5lclA8c3RkOjp2ZWN0b3I8VGVzdCo+LCBUZXN0PiBvOwogICAgaW50IGlSZWYgPSAwOwogICAgY29uc3QgVGVzdCAqcCA9IG51bGxwdHI7CiAgICBib29sIGJGb3VuZCA9IG8uZmluZEVsZW1lbnQoaVJlZiwgJlRlc3Q6Ok15RmllbGQsIHApOy8vINC90LUg0LrQvtC80L/QuNC70LjRgNGD0LXRgtGB0Y8KICAgIHJldHVybiAwOwp9