I have a class (say MyClass) and functions that take instances of MyClass as arguments. The functions need to access private members of MyClass. The members are private because users of MyClass don't need to be know about the members. However, I don't want to make the functions members of MyClass because the functions should take several MyClass instances as arguments and the arguements are treated symmetrically. I don't want to deal "this" object specially.
If there were a kind of module system so I could declare a module containing the functions as a friend of MyClass, I would be happy. But there is no such things in C++. One way is to make a friend class and make the functions static members of the class. However, many people don't recommend the way (eg. Namespace + functions versus static methods on a class) because class is not intended for such use.
Any design solution for this case?