问题标签 [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 投票
10 回答
187947 浏览

c++ - 模板模板参数有哪些用途?

我见过一些使用模板模板参数(即以模板作为参数的模板)进行基于策略的类设计的 C++ 示例。这种技术还有什么其他用途?

0 投票
2 回答
5464 浏览

c++ - 帮助 c++ 模板模板

好的,所以我写了一个类似 stl 的算法,叫做cartesian_product. 对于那些不知道的人,笛卡尔积是两组中所有可能的元素对。{1, 2, 3}所以和的笛卡尔积{10, 20, 30}

{(1,10), (1,20), (1,30), (2,10), (2,20), (2,30), (3,10), (3,20), (3,30)}

所以函数看起来像

没有模板类型定义,所以我创建了一个特征类来保存输出迭代器的类型:

那么我可以说:

但这似乎无法编译。我得到一个很好的错误:

所以我很难过。我怎样才能让它工作?

0 投票
4 回答
1806 浏览

c++ - 部分模板特化:匹配特化模板参数的属性

有没有办法定义这样的部分专业化,AA<C, B<P1> >将是A正常的模板,但A<C, B<P2> >会是专业化吗?

针对 Marcelo 进行编辑:更具体地说,不应仅使用 B 选择专业化,还应选择具有特定属性的任何类型,例如它是第一个参数为 P2 的模板。

目标是为Y提供一个漂亮的界面A,允许编写类似A<C, Y<P2,Q> >.


用模板模板参数替换Y模板参数会很好,但是有没有办法在此基础上对其进行部分专门化P

目的是编写如下内容:

编辑以回应 In silico:我说制作模板模板参数会很好Y,但实际上这违背了我想要做的目的,即用于Y将逻辑链接的属性组合在一起,但仍然A基于一个那些子属性。


有没有办法通过将特征添加到专业化template <> class B<P2>然后在中使用 SFINAE A?目的是编写如下内容:

0 投票
1 回答
1298 浏览

c++ - 将自身称为模板模板参数的模板类?

这段代码:

不编译,我想因为A<B>被解释为A<B<T> >B's 范围内。

那么,如何B在其范围内作为模板模板参数传递呢?

0 投票
5 回答
243 浏览

c++ - 使用模板模板参数时出现荒谬的错误

我一直在尝试创建一个带有Test22 个模板参数的模板类(),Type1并且Type2. 众所周知,第二个参数也是一个模板类,它接受 2 个模板参数(TypeATypeB)。

现在,为了构造 的对象Test2,我希望用户能够使用两种类型的构造函数中的任何一种:

  1. 一个接受 Type1和的对象Type2
  2. 一个接受Type1TypeA的对象TypeB

我写了以下代码:

我已经尝试了很多,但我得到了非常荒谬的错误,例如:

wrong number of template arguments (1, should be 2)在 17 号线和 20 号线。

0 投票
1 回答
411 浏览

c++ - 仅在两个成员都被参数化后,使用模板模板参数构建错误

我正在尝试传递一个模板模板参数,它的参数是一个非类型值,其类型等于先前模板参数的子类型(哇!这很难说,因为它很难读!),我是尝试将结果加入单个参数化模板后出现一些构建错误。

我有以下代码(使用 g++ 4.4.1 和 -std=c++0x 编译得很好):

但是,现在看一下Now模板:我有两个由布尔值参数化的成员。concrete_t然而,取决于封闭Now模板的 bool 参数,而MyHold不是。我想改变它,所以我Now用这个替换声明:

但这给了我以下错误:

我已经盯着这个看够久了,我必须说我完全不明白为什么这个简单的更改会引发错误。有任何想法吗?

编辑:这是对问题的最小说明,以(希望)使其更容易思考:

0 投票
4 回答
773 浏览

c++ - 是否应该允许模板模板参数接收从先前参数解析的参数?

我在 g++ 4.4 和 4.5 上发现了一个奇怪的问题。我问过这个问题是因为我认为我在代码中犯了一些愚蠢的错误。原始帖子在这里,但为了完成帖子,我将在这里重新发布有问题的代码:

它似乎并不是真正的程序员错误,尽管我可能错过了模板模板参数解析的一些晦涩规则。但是我尝试将错误发布到 ubuntu 跟踪器(希望他们会忽略它或以其他方式将错误发送到上游)

所以,只是为了检查这是否真的是一个错误,我给自己弄了一份 2003 标准的副本,我现在已经阅读了第 14.3.3 节几次,但如果通过,我仍然觉得我错过了丝毫线索允许或不允许带有示例代码中的参数的模板模板参数。我什至不确定文件的这一部分是否提到了这方面的任何内容

我的问题是:你知道这是在哪里指定的吗?

编辑:这个问题已经有一个多星期没有回答了,这很有趣:它让我相信 ISO c++ 标准没有指定我们是否可以使用以前的模板参数来指定后续模板参数的类型(至少在规定的形式),这基本上留给实施者决定

第二次编辑(2011 年 10 月 1 日):人们,可能有一些我们都缺少的东西(或者很多高技能的编译器设计者都错了):我用英特尔 c++ 编译器 XE 12.0 尝试了这个,我得到了这个:

0 投票
1 回答
924 浏览

c++ - 使用 SWIG 包装模板模板参数类

我有一个 C++ 类,如下所示:

我试图用 SWIG 包装。我的 MyClass.i 看起来像:

但是,SWIG 似乎在模板模板参数方面存在问题。编译时它会抱怨错误消息:

查看生成代码中的该行,它包含以下行:

出于某种原因,它逐字使用虚拟模板名称作为类的名称,尽管我已经告诉它这个类的实例化应该有一个 SimpleContainer 的 ContainerType。

有什么办法可以绕过这个错误?我在SWIG 跟踪器中发现了它的提及,但我无法理解上一篇文章中提到的解决方法,而且那个 bug 已经有 4 年的历史了。

我在 openSUSE 11.4 上使用 SWIG 1.3.40 和 GCC 4.5.1

0 投票
3 回答
38172 浏览

c++ - 可变参数模板模板和完美转发

这个关于对象生成器模式的问题让我想到了自动化它的方法。

本质上,我想自动创建像std::make_pair,这样的函数std::bind1ststd::mem_fun这样就不必为每个模板类类型编写不同的函数,您可以编写一个单一的可变参数模板模板函数来一次处理所有情况。此功能的用法如下:

可以写这个函数make吗?我已经尝试过了,但它在 GCC 4.5 或 4.6 中不起作用:

如果我尝试打电话(例如)make<std::pair>(1, 2)我会得到

我在这里的任何地方都有语法错误吗?
或者这是对的,而 GCC 是错的?
或者这在 C++0x 中根本不可能?

[编辑]

提案N2555似乎表明这是允许的,并且GCC 声称已在 GCC4.4 中实现了它

0 投票
1 回答
893 浏览

c++ - 是否有函数模板模板参数之类的东西?

所以我知道 C++ 有一个称为“模板模板参数”的功能,您可以在其中将类模板作为模板参数传递。例如:

功能模板有类似的东西吗?即有没有办法将函数模板(例如,std::make_pair)作为模板参数传递给类?