问题标签 [template-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 投票
1 回答
1207 浏览

c++ - 将命名参数转换为模板模板参数有什么用

如果我需要foo使用模板模板参数定义模板函数,我通常会执行以下操作:

注意 template-template 参数的模板参数是未命名的,但我们可以为这个参数指定一个名称:

这似乎根本没有用,因为我无法INNER在函数中引用参数,上面的代码会产生以下错误:

错误:'INNER' 没有命名类型

令我惊讶的是,typename INNER它没有命名类型,毕竟typename关键字是为了命名类型。无论如何,这很容易解决:

但最后,INNER参数毕竟不需要名称:

并且(确保您在我之前已经注意到)模板模板参数的参数中的名称被忽略!它肯定被忽略了,因为如果不是,它应该与第二个模板参数的名称冲突foo,不是吗?

另一个模板模板参数的名称被忽略的演示:

T模板模板参数和模板模板本身同时使用命名的类型?我不这么认为,模板模板参数中的名称被忽略了AFAIK。

那么,问题是什么?

  1. 我的猜测正确吗?模板模板参数的命名模板参数的名称被忽略?
  2. 如果我弄错了并且我误解了整个事情,那么命名参数是否可以用于模板模板参数?你能提供一些有用的例子吗?

至于#2 上的有用示例,我指的是只能使用模板模板参数的命名模板参数来实现的东西。

0 投票
2 回答
292 浏览

c++ - 如何使用模板模板参数专门化模板

最后编辑

我有一个带有模板的函数:

它适用于我迄今为止测试过的任何类型的模板:

但是,假设我想专门化模板,当它需要一个带有两个参数的模板时,下面的代码不起作用:

AFAIK 使用其他类型的模板参数非常简单:

如何使用模板模板模板实现此功能?

编辑:

正如orlpangew函数模板所指出的那样,不能部分专门化,所以我应该坚持使用对象模板,这是我的尝试

有用:

但是现在,我应该指定所有参数,而不是让编译器猜测整个事情,嗯……这不是悲剧。

0 投票
2 回答
447 浏览

c++ - 从模板化模板类和可变参数模板中声明“容器”对象

我需要声明一个可以存储不同类型容器的类。即如果它可以处理std::bitset 和std::array 就好了。但是,这两个类需要不同的模板参数......是否可以(并且可能,如何)使用模板化模板类和可变参数模板来声明这种类?

示例(但错误):

编译器抱怨N/2不是一种类型。显然,对于 std::array 和 std::bitset 我都需要将大小作为最后一个模板参数......是否可以编写这种疯狂的代码?

谢谢!

编辑:就我而言,主要问题是可变参数模板只能在右侧展开,因此可变参数参数必须是最后一个。任何人都知道是否有任何计划允许在 C++17 中使用以下语法?

0 投票
1 回答
52 浏览

c++ - 如何使用两个模板模板参数指定共享模板变量?

我正在尝试构建一个迷你测试框架。我有一个函数接受两个由相同类型组成的类似列表的变量,我计划使用模板模板参数作为接口的一部分。到目前为止,我有这个,

if 条件中的assertEqualsif 是另一个函数。我的问题是,界面是否正确?其次,我将如何使用它?这个我试过没有用

Test::只是函数所在的类,并且haystack类型needlestd::vector<int>.

0 投票
1 回答
102 浏览

c++ - 有模板成员 - 模板模板扣除

假设我有以下两个测试类:

我想确定他们是否有这个模板成员test

对于会员type

完美运行:

但模板成员的等价物test

失败

我知道我可以像这样使用 SFINAE:

但我想知道为什么编译器正确地扣除了部分专业化,has_type_impl而它仍然保留在has_test_impl.

提前感谢您的启发!

0 投票
1 回答
100 浏览

c++11 - 如何访问类型别名中的模板模板参数?

是否可以在类型别名中使用模板模板参数?例如,是否可以编写类似于以下的类型别名:

哪个,当给定例如 std::tuple 时,将其类型用于其他用途?GCC 和 Clang 在它们的错误中都提到了类模板,我如何避免需要类模板?如果我删除所有 ...s GCC 错误更改为:

我不明白。容器本身不一定是模板,但我不知道如何使用 std::tuple 代替它。

根据 nms 答案更新,正确格式为:

同样,即使类型在容器中:

它有一些冗余代码,但应该足够好。

0 投票
1 回答
638 浏览

c++ - C++ - 具有默认参数的模板模板参数不起作用

所以我有一个形式的类:

现在我正在尝试将其实例化为

这会产生错误:

它指向>MyArray<T>

这有什么问题?为什么我不能有默认模板参数?

谢谢。

0 投票
4 回答
704 浏览

c++ - 在 C++ 中更改模板模板参数

我想设计一个创建内部类型的类,这些内部类型是作为模板参数传递的类型的变体。类似于以下非功能示例:

由于Base是完全指定的类型,Base<RefinedType> refinedStorage;因此将无法编译。简单地使用模板模板参数是行不通的,因为精炼类型需要基于嵌套模板的参数及其基本类型。

如何实现这种基于模板参数的完全指定类型和基本类型创建类型的模式?

编辑:我希望这是一个任意深度的复合,多个注入器类型执行级联转换。因此,同时传递模板模板参数和基本参数变得非常笨拙(特别是在处理复合的基本情况时),理想的解决方案将使用更直接的语法。

0 投票
1 回答
57 浏览

c++ - 模板模板参数何时成为标准的一部分?

我从Modern C++ Design的 1.5.2 节了解到,模板模板参数在编写本书时并未得到编译器的广泛支持。此功能何时成为标准的一部分?

0 投票
2 回答
163 浏览

c++ - 我不明白这个 C++ 模板是如何工作的

我正在阅读图书馆的源代码。但我不明白这个模板定义是如何工作的:

这就是如何使用 Use<> 模板声明一个类:

在 Use<> 模板定义中,有两个未知类型 A 和 T。

vcg::Use<MyVertex>::AsVertexType例如,我认为 A 是 MyVertex,但 T 是什么


补充

这是模板 UsedTypes 的定义

以及一系列 Arity 模板定义。这就像一个数学归纳法

仍然很难说模板参数 T 是什么。