Homepage GitHub

Question regarding template and union tags


#1

Hi!

This is more a C++ general question rather than UAVCAN related. Coming from C language I am a bit new to some C++ features such as templates. However, I am trying to make a function template that needs a union tag to create a uavcan request as below. T and V typenames works, but how can I make the tag a template as well?

template <typename TAG, typename T, typename V>
myFunction(uavcan_linux::NodePtr& node, [TAG], V& value) {
...
		typename T::Request request;
		request.to<[TAG]>() = value;  // Does not work... 
...
}

Kind regards


(Pavel Kirienko) #2

It doesn’t work because in a template context the compiler can’t know the kind of to; it doesn’t expect a template instantiation construct ahead. You have to tell the compiler that a template is coming by saying request.template to<TAG>().

In the future, when something isn’t working, please post what exactly the problem is and what error messages you’re seeing, otherwise it might be difficult to understand what’s happening.


#3

Yes, will do!
Thanks for the response, I understand your comment and will redo my work.

Thanks!
Regards