Вместо того, чтобы делать IsValid
глобальной функцией (которую вы случайно сделали здесь) или функцией-членом (которая, я уверен, была вашим истинным намерением), сделайте ее функтором , и в конструктор функтора передает экземпляр, который вы хотите использовать.
Как это:
class ClassA
{
private:
UtilityClass utilityCls; // this is the instance that I need to access
virtual void Read();
struct IsValid : public std::unary_function<char, bool>
{
IsValid(UtilityClass& utility) : utility_(utility) {};
bool operator()(char c) const
{
return utility_.ProcessData(c);
}
};
};
Используйте это так:
void ClassA::Read()
{
....
string str = "abcdefg"; // sample only
if(find_if(str.begin(), str.end(), IsValid(utilityCls)) == str.end())
{
....
}
}