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

c++ - 新 C++ 标准支持的功能是否支持模板模板参数?

我在 C++ Template: The complete Guide 一书中找到了以下语句:

不允许函数模板的模板模板参数。

但是他跟随一段代码为我编译和运行。

这是否意味着新的 C++ 标准支持函数的模板模板参数?以下帖子的答案另有说明: How to get template template argument deduction working with functions?

0 投票
2 回答
232 浏览

c++ - 是否有任何理由使模板模板参数成为非可变参数?

如果我希望模板模板参数有一个论点,那么我可以将其声明如下:

但是,如果我以后想提供一个模板模板参数,该参数需要两个参数,其中第二个参数具有默认值(如 std::vector)T<int> t_;仍然可以工作,但模板不匹配template<typename> class T。我可以通过制作template<typename> class T可变参数模板来解决这个问题template<typename...> class T。现在我的代码更灵活了。

将来我应该将所有模板模板参数设为可变参数吗?有什么理由不应该(假设由于其他原因我的代码已经需要 C++11 支持)?

0 投票
3 回答
237 浏览

c++ - 来自成员函数的模板模板返回类型

如何从成员函数返回任何整数容器?在下面的代码中,我尝试了两个测试类之间的任何排列,但似乎没有使用 g++-4.8.2 编译:

理想情况下,该程序将是 c++03 并且仅当 int 是包含的类型时才编译。在其他情况下向用户打印可读错误也很好,但我想这需要 boost 或 std static_assert()。谢谢!

编辑 1

不幸的是,2 模板参数版本仅适用于少数标准容器,注释掉的会导致编译错误,因为它们需要不同的模板参数:

但以下 c++11 版本似乎适用于每个容器:

0 投票
5 回答
650 浏览

c++ - 使用模板模板参数进行参数推导

我有一个类模板。在这个类模板中,我试图定义一个成员函数模板,它接受const_iterators 集合上的strings。集合本身可以是任何类型的 StdLib 集合,但实际上它将是 avector或 a list

由于集合可以是任何类型,所以我使用一个template-template参数来指定集合类型。但是,它将始终是string. 我希望模板参数推导起作用,这样我就不必在调用成员函数时指定集合类型。

SSCCE 中后面的代码类似于我的预期用例。

到目前为止,我已经为类定义(Live Demo):

类模板的实例化编译成功:

然而,当我尝试利用论据推论(没有它,整个练习几乎毫无意义):

GCC 抱怨它无法推断出模板参数:

最终,我真正关心的是能够DoItstring. 集合的实际类型可以是vectorlist,我不想指定模板参数,也不想基于容器重载。

我怎样才能让它工作?

请注意,我的实际用例将使用 C++03。欢迎使用 C++11 解决方案,但我只能接受 C++03 解决方案。

0 投票
3 回答
79 浏览

c++ - 我可以返回不同类型的模板容器吗?

我怎样才能创建一个行为像这样的函数?我似乎无法正确声明返回类型。

0 投票
2 回答
731 浏览

c++ - 为什么最简单的template-template编译不出来?

以下代码无法使用 VC++ 2013 CTP 编译。

输出如下:

0 投票
2 回答
133 浏览

c++ - 模板<模板something_else >,这是什么?

我刚刚开始学习 C++11,但我从未在新功能列表中看到过这种语法:

它是什么以及它是如何工作的?

0 投票
1 回答
66 浏览

c++ - 找不到模板模板函数的匹配项

以下代码在g++下编译失败,报错如下:

“调用 'GetRecById(int&, NULL)' 没有匹配的函数”:

目的是 GetRecById() 支持使用不同的记录查询策略进行实例化,例如用于单元测试目的。

我在这里做错了什么?FWIW,它确实在 Sun Studio 10 下编译。

提前致谢。

0 投票
2 回答
184 浏览

c++ - 具有类型和模板模板参数的模板类中类型参数的部分特化

我想专门化以下模板类的类型参数,它有一个类型参数和一个模板模板参数:

我尝试了在以下每个片段的最后一行添加和/或省略.template和的所有排列,但没有一个编译:typename

1.)

2.)

3.)

4.)

为什么它们中的任何一个都不起作用?

关于每个适用片段的最后一行:

  • 没有typename澄清E是 class 使用的类型Foo,还是只能在类定义的{}主体中使用此语法Bar
  • 没有template澄清Foo是一个模板,因此阻止编译器解析Foo <Foo“小于”,或者这种语法只能在类定义的{}主体中使用Bar

我怎样才能让它工作?

0 投票
2 回答
106 浏览

c++ - 模板模板参数与函数模板的等效行为

我正在尝试编写这样的代码:

希望能够在(std::[unordered_][multi]map)具有字典接口的各种容器上调用上述函数,例如:

我知道函数模板不允许模板模板参数。但是还有其他方法可以达到同样的效果吗?