Not quite what you requested, but ... if you templatize structures B , C , etc., you can get something like this.
#include <iostream> class A; template <std::size_t> struct X { static void doIt(A* pa); }; class A { int i = 9; template <std::size_t I> friend void X<I>::doIt (A* pa); }; template <> void X<0U>::doIt(A* pa) { std::cout << pa->i << std::endl; } template <> void X<1U>::doIt(A* pa) { std::cout << pa->i * 2 << std::endl; } template <> void X<2U>::doIt(A* pa) { std::cout << pa->i * 3 << std::endl; } using B = X<0U>; using C = X<1U>; using D = X<2U>; int main() { A a; B::doIt(&a); C::doIt(&a); D::doIt(&a); }
max66 source share