diff --git a/lib/orogen/templates/tasks/TaskBase.hpp b/lib/orogen/templates/tasks/TaskBase.hpp index 9705f753..8e5f89b6 100644 --- a/lib/orogen/templates/tasks/TaskBase.hpp +++ b/lib/orogen/templates/tasks/TaskBase.hpp @@ -3,6 +3,8 @@ #ifndef <%= project.name.upcase %>_<%= task.basename.upcase %>_TASK_BASE_HPP #define <%= project.name.upcase %>_<%= task.basename.upcase %>_TASK_BASE_HPP +<% typekit = project.typekit %> + #include #include #include <<%= task.superclass.header_file %>> @@ -16,17 +18,43 @@ #include <<%= project.typekit.name %>/TaskStates.hpp> <% end %> +<% task.self_properties.sort_by(&:name).each do |p| %> +<% type = p.type %> +<%= typekit.cxx_gen_includes(*typekit.include_for_type(type)) %> +extern template class RTT::Property< <%= type.cxx_name %> >; +<% end %> + +<% task.self_attributes.sort_by(&:name).each do |a| %> +<% type = a.type %> +<%= typekit.cxx_gen_includes(*typekit.include_for_type(type)) %> +extern template class RTT::Attribute< <%= type.cxx_name %> >; +<% end %> + +<% task.self_ports.sort_by(&:name).each do |p| %> +<% type = p.type %> +<%= typekit.cxx_gen_includes(*typekit.include_for_type(type)) %> +extern template class <%= p.orocos_class %>< <%= type.cxx_name %> >; +extern template class RTT::base::ChannelElement< <%= type.cxx_name %> >; +<% end %> + +<% types = task.self_dynamic_ports. + map { |p| [p.orocos_class, p.type] if p.type }. + compact %> +<% types.each do |orocos_class, type| %> +<%= typekit.cxx_gen_includes(*typekit.include_for_type(type)) %> +extern template class <%= orocos_class %>< <%= type.cxx_name %> >; +extern template class RTT::base::ChannelElement< <%= type.cxx_name %> >; +<% end %> -<% task.used_typekits.sort_by(&:name).each do |tk| %> - <% next if tk.virtual? %> -#include <<%= tk.name %>/typekit/Types.hpp> +<% task.self_operations.sort_by(&:name).each do |op| %> +<% op.used_types.each do |type| %> +<%= typekit.cxx_gen_includes(*typekit.include_for_type(type)) %> +<% end %> <% end %> + <% task.implemented_classes.sort.each do |class_name, include_file| %> #include <<%= include_file %>> // to get <%= class_name %> <% end %> -<% if component.typekit %> -#include "<%= component.typekit.name %>/typekit/Types.hpp" -<% end %> <% code_before, code_after = task.base_header_code.partition(&:first)