c++ - 递归地将模板模板传递给模板模板函数

标签 c++ templates recursion typename template-templates

<分区>

在我看来,既然在 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... >();

关于c++ - 递归地将模板模板传递给模板模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57516167/

相关文章:

java - 查找字符串最右边的出现

recursion - 在纸上进行递归的简单方法?

c++ - 如何使用可变模板参数调用模板函数?

c++ - 在 C++ 中将结构指针设置为 null 时存储的值消失

c++ - 在类模板(链接列表)中重载运算符

c++ - 模板类的内部类不会在 XCode 4.5.2 上编译

c++ - 在 C++ std::map 中使用模板迭代器

c++ - 包含特定 boost header 时标准非 boost 文件中的错误

带有附加顺序的 C++ 字典/ map

javascript - 使用javascript对堆栈元素进行排序