递归地将模板模板传递给模板模板函数

Recursively Pass Template Template To a Template Template Function

在我看来,既然在 C++ 中我们可以传递模板模板,那么接受模板模板的函数应该能够将(它的)模板模板传递给它自己。然而,情况似乎并非如此。

template< typename PREVIOUS_TYPE_T, typename TYPE_T >
struct Node
{
    typedef TYPE_T TYPE;
    typedef PREVIOUS_TYPE_T PREVIOUS_TYPE;
    PREVIOUS_TYPE_T* previous;
    template< template< typename... > typename FUNCTOR_T, typename... CURRENT_ARGUMENTS_T >
    void DoCall() {
        previous->DoCall< FUNCTOR_T, TYPE_T, CURRENT_ARGUMENTS_T... >();
    }
};

有没有办法通过上面的 FUNCTOR_T,或者有什么变通办法吗?

您不能使用 ARGUMENTS_T。该名称无效。

当您四处传递模板模板时,它仍然是一个没有传递给它的参数的模板。与 std::plus<int>.

相比,std::plus 没有可提取的模板参数

请改用 CURRENT_ARGUMENTS_T,这是您要转发的内容。

另外,你previous是依赖型。您必须消除模板歧义:

previous->template DoCall< FUNCTOR_T, TYPE_T, CURRENT_ARGUMENTS_T... >();