[llvm-dev] Variadic templates for llvm::opt::ArgList/llvm::opt::option::matches

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 28 08:05:00 PST 2016


Much of this sort of thing is legacy code from before C++11 existed/before
LLVM adopted C++11.

I think "patches welcome" is correct here - we have converted some things
to variadic templates (usually if someone wanted one more overload - just
fix it by switching to a variadic template instead), but no global cleanup
has been done (nor expected - but appreciated if anyone feels like doing so
:))

- Dave

On Thu, Jan 28, 2016 at 12:24 AM, <Alexander G. Riccio> via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> I'm curious: did anybody ever consider using variadic templates for the
> highly redundant overloads in ArgList.cpp? It's a very textbook use-case
> <http://eli.thegreenplace.net/2014/variadic-templates-in-c/>.
>
> "Templates are confusing to many programmers" is a perfectly valid answer.
>
> Code like seven of these:
>
> Arg *ArgList::getLastArg(OptSpecifier Id0, OptSpecifier Id1,
>                          OptSpecifier Id2, OptSpecifier Id3,
>                          OptSpecifier Id4, OptSpecifier Id5,
>                          OptSpecifier Id6, OptSpecifier Id7) const;
>
> ...could be replaced by code that looks something like this:
>
> //In llvm/Option/Option.h
> template<typename Opt>
> bool Option::matches(T Opt0) const {
>   return Option::matches<OptSpecifier>(Opt0);
> }
>
> template<typename T, typename... Opts>
> bool Option::matches(T Opt0, Opts... opts) const {
>   return Option::matches<OptSpecifier>(Opt0) || matches(opts...);
> }
>
> //In llvm/Option/ArgList.cpp
> template<typename... Ids>
> Arg *ArgList::getLastArg(Ids... ids) const {
> [...loop here...]
>   if((*it)->getOption().matches(ids...))
>   Res = *it;
>   Res->claim();
> [etc...]
>
>
> Sincerely,
> Alexander Riccio
> --
> "Change the world or go home."
> about.me/ariccio
>
> <http://about.me/ariccio>
> If left to my own devices, I will build more.
>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160128/83765130/attachment.html>


More information about the llvm-dev mailing list