问题标签 [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.
c++ - 新 C++ 标准支持的功能是否支持模板模板参数?
我在 C++ Template: The complete Guide 一书中找到了以下语句:
不允许函数模板的模板模板参数。
但是他跟随一段代码为我编译和运行。
这是否意味着新的 C++ 标准支持函数的模板模板参数?以下帖子的答案另有说明: How to get template template argument deduction working with functions?
c++ - 是否有任何理由使模板模板参数成为非可变参数?
如果我希望模板模板参数有一个论点,那么我可以将其声明如下:
但是,如果我以后想提供一个模板模板参数,该参数需要两个参数,其中第二个参数具有默认值(如 std::vector)T<int> t_;
仍然可以工作,但模板不匹配template<typename> class T
。我可以通过制作template<typename> class T
可变参数模板来解决这个问题template<typename...> class T
。现在我的代码更灵活了。
将来我应该将所有模板模板参数设为可变参数吗?有什么理由不应该(假设由于其他原因我的代码已经需要 C++11 支持)?
c++ - 来自成员函数的模板模板返回类型
如何从成员函数返回任何整数容器?在下面的代码中,我尝试了两个测试类之间的任何排列,但似乎没有使用 g++-4.8.2 编译:
理想情况下,该程序将是 c++03 并且仅当 int 是包含的类型时才编译。在其他情况下向用户打印可读错误也很好,但我想这需要 boost 或 std static_assert()。谢谢!
编辑 1
不幸的是,2 模板参数版本仅适用于少数标准容器,注释掉的会导致编译错误,因为它们需要不同的模板参数:
但以下 c++11 版本似乎适用于每个容器:
c++ - 使用模板模板参数进行参数推导
我有一个类模板。在这个类模板中,我试图定义一个成员函数模板,它接受const_iterator
s 集合上的string
s。集合本身可以是任何类型的 StdLib 集合,但实际上它将是 avector
或 a list
。
由于集合可以是任何类型,所以我使用一个template-template
参数来指定集合类型。但是,它将始终是string
. 我希望模板参数推导起作用,这样我就不必在调用成员函数时指定集合类型。
SSCCE 中后面的代码类似于我的预期用例。
到目前为止,我已经为类定义(Live Demo):
类模板的实例化编译成功:
然而,当我尝试利用论据推论(没有它,整个练习几乎毫无意义):
GCC 抱怨它无法推断出模板参数:
最终,我真正关心的是能够DoIt
在string
. 集合的实际类型可以是vector
或list
,我不想指定模板参数,也不想基于容器重载。
我怎样才能让它工作?
请注意,我的实际用例将使用 C++03。欢迎使用 C++11 解决方案,但我只能接受 C++03 解决方案。
c++ - 我可以返回不同类型的模板容器吗?
我怎样才能创建一个行为像这样的函数?我似乎无法正确声明返回类型。
c++ - 为什么最简单的template-template编译不出来?
以下代码无法使用 VC++ 2013 CTP 编译。
输出如下:
c++ - 模板<模板something_else >,这是什么?
我刚刚开始学习 C++11,但我从未在新功能列表中看到过这种语法:
它是什么以及它是如何工作的?
c++ - 找不到模板模板函数的匹配项
以下代码在g++下编译失败,报错如下:
“调用 'GetRecById(int&, NULL)' 没有匹配的函数”:
目的是 GetRecById() 支持使用不同的记录查询策略进行实例化,例如用于单元测试目的。
我在这里做错了什么?FWIW,它确实在 Sun Studio 10 下编译。
提前致谢。
c++ - 具有类型和模板模板参数的模板类中类型参数的部分特化
我想专门化以下模板类的类型参数,它有一个类型参数和一个模板模板参数:
我尝试了在以下每个片段的最后一行添加和/或省略.template
和的所有排列,但没有一个编译:typename
1.)
2.)
3.)
4.)
为什么它们中的任何一个都不起作用?
关于每个适用片段的最后一行:
- 没有
typename
澄清E
是 class 使用的类型Foo
,还是只能在类定义的{}
主体中使用此语法Bar
? - 没有
template
澄清Foo
是一个模板,因此阻止编译器解析Foo <
为Foo
“小于”,或者这种语法只能在类定义的{}
主体中使用Bar
?
我怎样才能让它工作?
c++ - 模板模板参数与函数模板的等效行为
我正在尝试编写这样的代码:
希望能够在(std::[unordered_][multi]map)
具有字典接口的各种容器上调用上述函数,例如:
我知道函数模板不允许模板模板参数。但是还有其他方法可以达到同样的效果吗?