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

c++ - 带有 gcc 4.4 的模板模板参数和可变参数模板

我在 Debian 挤压上使用 gcc 4.4。考虑以下代码。

所以,这里的想法是Tmatches stringCmatchesmap和模板参数包Argsmatches int。我可能有一些语法错误,如果是,请更正。特别是,如果一个人希望第一个模板参数class C匹配T,其余的匹配模板参数包Argstemplate <typename T, typename... Args> class C那么语法是否正确?

这给出了错误

这似乎类似于问题Variadic template templates and perfect forwarding。这个问题表明这是一个 gcc 错误,但也许我错误地认为这些问题是关于同一件事的。

请温柔一点。我对可变参数模板的了解还不到 12 小时;我只是想重写一些旧的 C++ 代码以减少重复。我也有一段时间没有做任何 C++ 了。如果有解决方法,请告诉我。谢谢。

编辑:Variadic 模板模板的评论中建议的解决方法和Ise Wisteria的完美转发对我有用,这表明这是同一个错误。当然,我现在(a)想知道这种解决方法有多脆弱,(b)它为什么有效,以及是什么促使 Ise 想到它。虽然我猜只有一诚可以回答最后一点。:-)

0 投票
2 回答
543 浏览

c++ - 如何访问可变参数模板参数包成员中存在的内部模板 typedef?

我有一些对我来说似乎很明确的代码,但 gcc4.7 令人窒息:

以这种方式访问​​ InnerMixins 有什么问题吗?当我写它时,它似乎很合理:)

0 投票
3 回答
727 浏览

c++ - 部分模板模板专业化

有这个代码:

但在某些情况下需要使用T*而不是std::list<T>as - 像这样:InnerCont

在这种情况下是否可以使用“模板模板”参数的部分专业化?
或者如何以最小的头痛存档它..

0 投票
1 回答
110 浏览

c++ - typename 参数的模板特化是特定模板的任何实例化

我有一个类模板Z,当传递一个特定模板的任何实例化类型时,我想专门研究它N

由于Z<int, L>and 和Z<int, N<int>>andZ<int, M<int>>都是有效的用例,我无法做任何事情来Z转换为模板模板,并且Z<TX, TY>::bar(TX &)TY类从N. 有没有办法做到这一点?

0 投票
1 回答
116 浏览

c++ - 模板实例化中模板模板参数的可能形式

模板参数的一种可能形式是类模板。C++ 标准 (C++2003) 声明模板实例化期间模板模板参数的参数是“id 表达式”。这个非终端相当宽。它允许析构函数、重载运算符等。例如,以下代码应该可以正常编译:

最后两行没有任何意义。但从语法的角度来看,它们很好。语法不是(也不应该)准确地描述语言,但是第 14.3.3 段,“模板模板参数”没有提到在这种情况下对语法规则的任何限制。

任何人都可以接受或反驳我的陈述:

  1. 模板模板参数只能是一个标识符,可能是合格的。
  2. 如果第一点属实,这在标准中绝对值得一提。
0 投票
1 回答
336 浏览

c++ - 模板模板参数是标准的扩展还是一部分?

我正在搜索与模板模板参数相关的其他内容,并且在这个答案中发生了,该答案声称标准不允许模板模板参数

但是,以下代码在最新的 clang (3.2) 和最新的 GCC (4.8) 中编译:

这是扩展名,还是其他答案实际上不正确并且标准允许?如果没有,是否有任何遗漏的特殊原因?

0 投票
3 回答
1206 浏览

c++ - CRTP和模板模板?

我想为模板类做 CRTP,我希望抽象基类知道派生类的模板参数。

我试过了,但它不起作用:

g++ 4.6.2 告诉我:

有什么问题,这样的事情有什么好的解决方案?

0 投票
4 回答
14140 浏览

c++ - 当我们有模板模板参数时,为什么需要分配器::重新绑定?

每个分配器类都必须有一个类似于以下的接口:

使用分配器的类会做一些多余的事情,如下所示:

但为什么这是必要的?

换句话说,他们就不能说:

哪个更优雅,更少冗余,并且(在某些类似情况下)可能更安全?
他们为什么走这rebind条路,这也造成了更多的冗余(即你不得不说T两次)?

(类似的问题char_traits和其余的......虽然他们不都有rebind,但他们仍然可以从模板模板参数中受益。)


编辑:

但是,如果您需要超过 1 个模板参数,这将不起作用!

实际上,它的效果非常好!

现在 ifvector只是这样定义的:

然后你可以说:

它会很好地工作,而不需要你(多余地)说int两次。

并且rebind内部的操作vector将变成Alloc<Other>而不是Alloc::template rebind<Other>::other.

0 投票
1 回答
721 浏览

c++ - 具有枚举规范的模板模板类在 MSVC++ 编译器上失败:C3201

代码

这是我的问题的SSCCE示例:

[编辑:更改LibraryT<MyEnum::Enum, MyEnumTemplate>LibraryT<typename MyEnum::Enum, MyEnumTemplate>无效]

错误

我想要的功能是能够创建一个基于枚举和一个由该枚举专门化的类的库。以上是我的第一次尝试。我相信它是 100% C++,并且 GCC 支持我并说这一切都有效。但是,我希望它使用 MSVC++ 编译器进行编译,但它拒绝:

问题

有什么方法可以使 MSVC++ 编译器 [编辑:MSVC++ 11 编译器 (VS 2012)] 像我的代码一样?通过一些附加规范或不同的方法?

可能的(但不希望的)解决方案

将枚举类型硬编码为某种整数类型(基础类型)。然后没有问题。但是后来我的库在积分而不是枚举类型上运行(不受欢迎,但有效)

0 投票
2 回答
722 浏览

c++ - 通过模板滥用的函数式 C++

我决定尝试使用模板在 C++ 中编写功能映射实现,这就是我想出的:

现在这一切都很好,花花公子,甚至可以编译。问题是,我不知道如何实际调用它。

尝试天真的方式会产生以下错误:

据我所知,所有论点都是正确的。gcc 根本没有提出任何替代方案,这让我相信我对 WugMap 的定义是可疑的,但它编译得很好,所以我很迷茫。谁能指导我度过这个愚蠢的过程?

如果有人可以建议一种更好的方法来编写这样的函数,该函数将支持使用包含任何类型对象的任何类型的集合,我会考虑更改它。

到目前为止,这是我的想法。

我目前正在使用 Ideone,它使用 C++03、gcc 4.3.4。

附录 1

这在 C++11 中可行吗?有人暗示它是。我知道 C++11 中的模板支持不同数量的参数,所以我也会修改我的要求以适应它。我会花一些精力来写一些东西,但与此同时,这里是我正在寻找的要求:

  • 应该有一个类似下面的签名:

    这需要一些集合 C1,包含 U 类型的元素,通过引用构造一些默认参数,并且还获取 U 的一些成员函数(返回 V 并获取一些未知类型的参数),然后在顺序,要传递给成员函数的参数。该函数最终将返回一个 C2 类型的集合,该集合包含类型 V 的元素并使用未知数量的默认参数进行初始化。

  • 应该是可链接的:

    /li>
  • 如果我在使用它时不必有模板参数或任何其他额外的冗长,则可以加分。

std::transform很棒,但不可链接。