
On 6.2.2013 г. 16:57 ч., Matus Chochlik wrote: [...]
There are also a couple of things I would like to suggest:
1) Please add perfect forwarding (std::forward) to the macros and the caller# functions in gen/message_macros.ipp so that properties can be move-assigned.
I have this and much more C++11 features in mind, but I'm going to start adding them after a couple of months, after I have a C++03 version I'm happy with. Unfortunately lots of users still use C++03 and the C++11 support the popular compilers varies, and focusing on this now, will prevent me from adding critical features, that I would like people to try-out.
2) Would it be possible to have object.implements<message>() in addition to object.implements(message_msg). IMO the former is more generic.
From a glance at the implementation this would require some changes to the representation of messages, but it should be doable.
That would be a no. I mean it is technically possible, but I don't think adding another representation of messages would help. The plan is to stick to this simple rule of thumb: When you're referring to a message, you use `<message_name>_msg`. When calling a message you use `<method_name>`. Remember the overloaded messages: they introduce different message names for the same method name. Adding this feature would require me to have a third way of referring to messages `<message_name>` without the _msg. It would get confusing. Now, I see that this makes things seem a bit inconsistent, but I have really thought hard about the public interface. And considering all the things I'm going to add to the library in the near future, this seems like the best way to go. For example messages are not going to remain the only mixin features. Very soon I'll add "facts" which are static member constants within the mixin class. In the more distant future I'll be adding serialization and thread safety features and I will allow users to add some custom ones. Imagine this (circa 2014): BOOST_DEFINE_MIXIN(d3d_rendering, has_rendering_fact & max_buffers_fact & paralelize(draw_msg) & log(load_data_msg) & debug(trace_msg) & per_frame_memory_access_hint & block_serialization_hint)
3) Please add <some-message>(object&, <other-params>) in addition to <some-message>(object*, <other-params>), if possible.
Check. That's another thing that I had just forgotten (along with object::implements). I'll add it by the end of the week. -- Borislav