message Foo{
oneof b_message {
Bar = 16;
Baz = 17;
}
}template<class T>
void b_handler(const T&);
template void b_handler(const Bar& bar){...}
template void b_handler(const Baz& baz){...} void foo_handler(const Foo& foo){
...
b_handler(foo.b_message());
} template<class T>
const T& Foo::b_message() const;
const Bar& Foo::b_message() const;
const Baz& Foo::b_message() const;Suppose I have a message:message Foo{
oneof b_message {
Bar = 16;
Baz = 17;
}
}
and I have some C++ handler that is a templated function:template<class T>
void b_handler(const T&);
template void b_handler(const Bar& bar){...}
template void b_handler(const Baz& baz){...}
What I'd like to be able to do is:void foo_handler(const Foo& foo){
...
b_handler(foo.b_message());
}
Essentially, if protoc generated some kind of function liketemplate<class T>
const T& Foo::b_message() const;
const Bar& Foo::b_message() const;
const Baz& Foo::b_message() const;that would make for automatic handling of whatever kind of b_message Foo had carried, rather than doing a switch(foo.b_message_case()) type decision tree.
I'm sure there are a lot of edge cases that I'm not thinking of, or cross-language considerations, but is anything like this possible?
--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+u...@googlegroups.com.
To post to this group, send email to prot...@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.
So, the cpprefernce page on template type deduction seemingly suggests you can: http://en.cppreference.com/w/cpp/language/template_argument_deduction