问题标签 [recursive-templates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
113 浏览

c++ - C++11 递归模板

我想实现以下行为。在基类中,我希望有一个容器来存储指向派生类方法的指针。(我想在那里存储 h1 和 h2)。基类还实现了允许存储这些指针和容器本身的方法

还没有任何代码准备好,因为我想知道这是否可能 - 例如:

但是,我如何声明派生类的对象?对我来说,它的参数是递归的,例如。

所以它永远不会编译。我确信有一些方法可以处理它,但我不知道。

0 投票
3 回答
53 浏览

c++ - 作用于可变类模板参数的递归函数

所以我有以下(减少)类:

该类ComponentArray基本上是一个包含一组特定类型组件的向量的包装器。

该类ComponentBlockTupleAccessor或多或少模拟了 std::tuple 的缩减版本,其中可以使用可变参数模板将任意数量的唯一类型ComponentArray继承到类中。ComponentTuple

pop_back函数 inComponentTuple旨在递归地从每个s中取出pop_back一个元素。ComponentArray

在课堂之外,ComponentTuple我希望能够简单地调用类似的东西,compTupleInstance.pop_back()并且所有ComponentArray的都应该删除它们的最后一个元素。

我得到一个编译错误“重载'pop_back()'的调用不明确”pop_back();

我似乎无法弄清楚 A、B(包)、S 和 T(包)模板参数的组合,它可以为我提供所需的功能。我在这里想念什么?

编辑:这是一个简单的使用场景:

ComponentTuple 模板参数将始终是唯一类型,并且始终大于一。

0 投票
0 回答
269 浏览

c++11 - 元组索引超出范围

我正在尝试使用递归模板来计算元组中元素的总和。但是我一直遇到元组索引超出范围的错误。错误 C2338:元组索引超出范围

我该如何解决元组索引越界错误?我认为具有 size_t 为 1 的部分专用模板计算器的结束条件就足够了,但是递归元组不断超出元组中元素的实际数量。

0 投票
1 回答
338 浏览

javascript - 如何在Angular的递归ng模板中显示和隐藏子列表?

我在这里查找了很多不同的答案,但大多数都不准确。所以,我想问一下显示和隐藏列表(ul)的好方法是什么,但只有通过onclick点击的列表。

我有以下模板

Children是一个包含名称和更多子对象的对象数组。

我试图为每个子列表绑定特定的类,然后通过它获取这些元素,document.getElementsByClassNames但它不能正常工作。

您目前有什么正确的方法来解决我的问题吗?我应该如何尝试切换这些子列表?我真的不知道了……我的 Angular 版本是 9。

0 投票
1 回答
70 浏览

c++ - 使用模板递归向上求和整数?

使用递归模板,我想计算n从 0 到n. 即SumUp<10>::n是 55。我想知道,因为我习惯于向下递归(即从n0 到 0)。可以从0到n吗?这是我的尝试:

问题是,在第二个模板中,n它是未知的,因此无法编译。

0 投票
0 回答
74 浏览

c++ - 具有递归和 std::enable_if 的模板特化

假设我想通过以下方式序列化以下数据。有些数据是 memcopy 可序列化的,有些则不是。

前面提到的类型是这样定义的:

如您所见,这两种结构类型的唯一区别是 IsMemcopySerializable::value 中的值。

请注意,对于所有 T,IsMemcopySerializablestd::vector<T>::value 为 false。

我们通过以下方式定义 FastBinarySerializer:

问题是以下行会生成此错误:

问题是 std::vector 不是 MemcopySerializable。FastBinarySerializer 类模板匹配两个特化。有没有办法让 FastBinarySerializerstd::vector<NonMemCpySerializable> 仅与 std::vector 专业化匹配?我尝试使用 DefaultType 和 NonDefaultType 来强制 std::vector 专业化被优先考虑无济于事。

我的约束:FastBinarySerializer 必须保留为类模板,而不是函数模板。SerializeValue 必须始终具有相同的函数签名。我无法在类模板实例化中手动指定 DefaultType 或 NonDefault 类型。

0 投票
1 回答
31 浏览

c++ - 如何重写模板函数以允许代码重用

考虑以下模板递归函数。其目的是创建一个向量,该向量包含枚举类 EnumClassName 中的所有值,其关联的谓词函数为其bool xxx<N>()返回true

使用递归基本情况:

现在假设有 10 个这样的函数,唯一不同的是xxx名称。即我们有alpha_stuff带有相应谓词函数的函数alpha<N>beta_stuff带有相应谓词函数beta<N>等的函数。

有没有办法不将上述函数重复 10 次,唯一的区别是在每个重复项中替换xxxwithalpha等?beta

我不能只遍历枚举值,因为这些xxx<N>函数又会调用另一个函数yyy<N>,该函数不会接受运行时生成的模板参数<N>(请原谅我的行话,我实际上不知道我在说什么或者这个有效,我只知道当我以这种方式尝试时它给了我编译错误)。