递归地将模板模板传递给模板模板函数
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... >();
在我看来,既然在 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... >();