c++ - Partial specialization for pointer as function return type -
i have template wrapper function returns value this:
template<class t> t foo(bar& bar, const char* key) { return bar.value<t>(key); } but want handle pointer types bit different, this:
template<class t> t foo(bar& bar, const char* key) { return (t)bar.value<void*>(key); } so can do:
int x = foo<int>(bar, "x"); baz* b = foo<baz*>(bar, "b"); writing above gives me error because of multiple definitions. there other way this? prefer not add cast each function uses pointer.
i've tried following:
template<class t> t foo(bar& bar, const char* key) { if(std::is_pointer<t>::value) return (t)bar.value<void*>(key); else return bar.value<t>(key); } but doesn't work either because there qvariants involved , produce error instantiating 1 of template functions unknown pointer type (the bar.value<t>).
use tag dispatching delegate calls helper functions different things based on whether t pointer type or not.
namespace detail { template<class t> t foo(bar& bar, const char* key, std::false_type /*not is_pointer*/) { return bar.value<t>(key); } template<class t> t foo(bar& bar, const char* key, std::true_type /*is_pointer*/) { return (t)bar.value<void*>(key); } } template<class t> t foo(bar& bar, const char* key) { return detail::foo<t>(bar, key, std::is_pointer<t>{}); }
Comments
Post a Comment