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

c++ - 模板模板函数参数

对于我的生活,我无法让这个简单的奥术模板魔法起作用:

这可能在不涉及函子的情况下完成吗?

0 投票
4 回答
1715 浏览

c++ - 函数重载匹配模板模板

我希望第一个代码示例的最后两行打印相同。

类型按我预期扣除,重载分辨率也如我预期。但是,如果我显式地键入限定函数调用,那么当推导类型时,我会得到不同的结果。

第二个代码示例重复了用专业化替换重载决议的练习。在这种情况下,一切都会按任何人的预期进行。

有什么解释吗?

编辑:我又添加了一行,显示了 Karthik 提到的print<R,int>(r);我也不明白的内容。

代码示例1:(函数模板重载)

代码示例 2:(类模板特化)。

0 投票
1 回答
327 浏览

c++ - MSVC 中的模板模板参数错误,但 Clang 中没有。为什么?

根据一些谓词,我编写了这段代码来帮助我对引用集合的索引进行排序:

我正在这样使用它:

当我用 Clang 3.2 编译它时:

它编译得很好。

但是当我尝试用 Visual C++ 2013 编译它时,我得到了大量的错误,比如:

哪个编译器是正确的?
编写代码来执行此操作的正确方法是什么?

0 投票
1 回答
145 浏览

c++ - 部分默认使用内部类型初始化模板模板参数

我想以如下方式使用这个类(或它的正确外观)......

...因此在 MyClasscontainer_type中声明/ typedef'd 为:

这样的事情有可能吗?

0 投票
2 回答
145 浏览

c++ - 计为一个单一参数的模板模板参数

在下面的代码中,类模板使用一个参数,但如果模板参数是模板,则函数模板使用两个。这在使用类型推导时没问题,但在使用显式模板实例化时很奇怪。

是否可以将模板模板参数写为一个参数?

这个问题链接到函数重载匹配模板模板

编辑:

我得出的结论是这个问题不是一个好问题,因为如果有一个参数语法,重载决议仍然会选择错误的函数。这让我感到惊讶,但这里是证明它的代码(与以前相同的代码,除了一个模板函数重载发生了变化):

EDIt2:在跳过显式模板规范的主要内容中添加了进一步的打印。

EDIT3:下面的代码是废话。正如@DyP 正确指出的那样,我犯了一个错误。我void F(R<R<T>>)在明确的情况下打电话而不是void F(R<T>).

0 投票
2 回答
462 浏览

c++ - 获取可变参数模板可变参数模板参数可变参数参数

是的。

假设我有一个包含 typedef 的简单可变参数结构:

我想TupleTypeHolder<something>作为模板参数传递给另一个类,并获取该 typedef。

我所有的尝试都没有编译。

有没有办法从使用上述类作为模板可变参数模板参数的类中使用可变参数模板类的可变参数模板参数(在本例中为TupleTypeHolder's )?TArgs...


使用示例:

0 投票
2 回答
655 浏览

c++ - C++11模板别名作为模板模板参数导致不同的类型?

我们在以下源代码的编译中观察到了一个奇怪的行为:

这是取自模板别名的 c++11 标准提案的一个稍作修改的示例:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf (参见第 4 页) 另请注意,该提案“将 y 和 z 声明为同一类型”。因此,在我们的解释中,应该可以从 y 分配(或复制构造)z。

但是,此代码不能使用 gcc 4.8.1 和 clang 3.3 编译。这是编译器中的错误还是我们误解了标准?

在此先感谢 craffael 等人 ;)

PS Clang 错误消息是:

0 投票
2 回答
95 浏览

c++ - 多参数模板的部分默认特化

有没有办法从编译器中提取部分默认特化?

假设我有这两个参数模板:

而且我还有一些使用单个参数模板的代码,如下所示:

我想说:

其中 X<int> 被视为单个参数模板。它相当于这个模板:

这看起来就像一个人如何专门化 X<int, B> 而不实际改变任何东西。它在某种程度上类似于默认特化——除了默认特化不产生另一个模板而是产生一个实际类型(换句话说,它总是总的)。

我意识到我可以级联模板参数

但我发现这很难阅读并且无法清楚地传达我的意图。

谢谢你。

0 投票
3 回答
169 浏览

c++ - 从其他容器中识别 smart_pointer 的模板函数

考虑以下模板函数:

目标是能够将普通引用、指针或智能指针传递给它们,并使用重载和模板规范来调用正确的函数。以下驱动代码按预期工作:

但是,考虑一下如果我们尝试这样做会发生什么:

现在,我们得到一个编译错误。编译器决定使用的 DoSomething 版本是第 4 个版本。在这里面,我们引用了一个函数 get(),这个向量没有。如果编译器以某种方式选择 DoSomething 的第一个定义,它会编译得很好,并按我的意图工作。

那么我可以将第 3 和第 4 特化限制为仅在模板模板参数包含 get() 方法时匹配吗?有没有办法让这件事发生,也许使用特征、SFINAE 或其他更高级的模板技术?

0 投票
1 回答
108 浏览

c++ - Advanced C++: Copy configuration (object) in a template template class's instance

I have a problem with templatized classes that I made most abstract with this example.

So for a class which has the form

I define FunctorClass which I will use as the second template parameter in MyMainClass

where my config class is simply

If I make an object of this class

So in brief, I want the object config to be copied to MyMainClass<>::FunctorClass<>::cfg

Is that possible?

If you need more information on the problem, please let me know.

Thank you for any efforts.