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

Recursively Pass Template Template To a Template Template Function

本文关键字:函数 递归      更新时间:2023-10-16

在我看来,既然在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中提取,而不是std::plus<int>

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

此外,您previous是依赖类型。您必须消除模板的歧义:

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