
Jonathan Turkanis wrote:
I still haven't had time to think about Joel's proposal. However, I did spend consider effort at one point trying to support simple handwritten interfaces using ordinary member function syntax, and convinced myself that it was probably not possible. This might be because I had stronger requirements than Joel, though. Among other things, I required:
1. support for derived interfaces, including MI 2. interface instance, including those involving MI, should have the size of a struct conatining two pointers (assuming the degree of EBO currently provided by most compilers) 3. It should be possible to define a const view const_view<IBar> of an interface, in which non-const functions are disabled. (Ordinary const-qualification is insufficient, since you can make a non-const copy of a const interface instance) 4. Implicit derived-to-base and non-const-to-const conversions 5. Support for aspect oriented programming.
Those are very good requirements.
For 2 and 5 -- at least -- I concluded that interfaces need to contain a nested rebind-like structure which allows them to be reinstantiated with different base classes. Since it's redundant to implement an interface's infrastructure twice, I put the rebind stuff in a helper class, and made the actual interface derive from an appropriate specialization of rebind. I was unable to find any way for users to write this stuff by hand without going insane.
The template-based IDL looks like it is potentially the most usable.
Given your requirements, I have to agree. Daniel Wallin's macro based suggestion is also quite readable. The question now is: when will they be implemented?
The only open question is whether compile-times will suffer unduly.
That will only be answered when an implementation becomes available. In the meantime, I'll see if I can get another shot at it following your requirements. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net