
On 6/29/2011 8:02 PM, Lorenzo Caminiti wrote:
Hello all,
Is there any way (SFINAE, etc) to check at run-time or at compile-time if a member function is not public?
class x { public: void f ( ) {}; protected: void g ( ) {}; private: void h ( ) {};
bool is_public(...) { ... } // some implementation
void check ( ) { std::cout<< is_public(x::f)<< std::endl; // 1 std::cout<< is_public(x::g)<< std::endl; // 0 std::cout<< is_public(x::h)<< std::endl; // 0 } };
Thanks a lot! --Lorenzo _______________________________________________ Unsubscribe& other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
This is off the top of my head but... It might be possible by declaring a friend class which does the introspection ala my TTI generated classes. If the friend class can find the function but a non-friend class can not find the function, then one knows that the function is not public. Similarly if one could have an introspection class derived from the actual class being introspected and find the function while not finding it otherwise, one knows it is a protected function. Whether either of these things can actually be done by TTI I would have to take a much closer look at eventually. Of course in any case one would have to know that the actual function exists in the class else not finding the function in any situation could mean it does not exist at all. I know that Joel Falcou, who is the Review Manager for my TTI libary, played around with 'friend' in introspecting class data, but I never followed up looking at his idea when doing TTI. Your query gives me something to think about for TTI, although I think the actual usefulness might be pretty small even if it could be done even if you have found a use for it. BTW the review of TTI begins tomorrow, and any relevant idea is welcome even if I choose to not actually try to implement it ( it may also be impossible ).