
In my spare time I've been fooling around with an implementation of an infrastructure that would allow workflow to be configured at run-time. A well-defined process flow is clearly easier to configure/implement at compile-time using the conventional means (coding). Say, bool my_process_flow() { if (call_a() == success/true) { return call_b(); } else { return call_c(); } } However, to be able to quickly adjust to changing customer requirements and/or procedures we might decide to provide a set of building blocks (like call_a, call_b, call_c) that could be assembled into a certain process flow at run-time. Maybe even give that ability to the customer themselves through, say, GUI interface. So, the infrastructure boils down to an Activity class that has an operation associated with it and can have two sub-activities to be called when the operation succeeds or fails. For example, // Create an activity with call_a() as an operation. Activity a(call_a); // Register call_b to be called when call_a succeeds. a.success() = call_b; // Regiter call_c to be called when call_a fails. a.failure() = call_b; call_a, call_b, call_c can be Activity instances themselves. So, we are building hierarchical tree-like structure to represent a certain process flow. We can easily support concurrent activities like a.success() = Concurrent(call_b)(call_c); Loops can be supported in a similar fashion (via pre-defined functiors). All mostly based on boost::function (a very handy gadget I must say. Kudos to the authors). Now after such a long and boring introduction to my actual question. :-) Is there any interest in having/developing such an infrastructure under the boost umbrella? Any input is welcomed even if you think it is a crappy idea. Best, Vladimir.