How do I pass a template as a template parameter to a template?

后端 未结 2 467
说谎
说谎 2021-02-05 08:34

I\'m trying to write something like:

          // I don\'t know how this particular syntax should look...
template Functo         


        
相关标签:
2条回答
  • 2021-02-05 09:00

    This is just a "template template argument". The syntax is very close to what you imagined. Here it is:

    template< template<typename Ty> class FunctorT>
    Something MergeSomething(const Something& lhs, const Something& rhs)
    {
        Something result(lhs);
        if (lhs.IsUnsigned() && rhs.IsUnsigned())
        {
            result.SetUnsigned(FunctorT<unsigned __int64>()(lhs.UnsignedValue(), rhs.UnsignedValue()));
        }
        else
        {
            result.SetSigned(FunctorT<__int64>()(lhs.SignedValue(), rhs.SignedValue()));
        }
        return result;
    }
    

    Your use-case should work like you posted it.

    0 讨论(0)
  • 2021-02-05 09:02

    The way you use it is correct. But your function template definition itself is wrong.

    It should be this:

    template<template<typename Ty> class FunctorT> //<---here is the correction
    Something MergeSomething(const Something& lhs, const Something& rhs)
    

    And Ty is not needed. In fact, its meaningless there. You can omit it completely.

    See this article by Stephen C. Dewhurst:

    • C++ Common Knowledge: Template Template Parameters
    0 讨论(0)
提交回复
热议问题