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

c++ - VC++ Variadic-Template-Template 错误 C2244:无法将函数定义与现有声明匹配

这可能是新手的错误,我正在使用 Microsoft Visual C++ Compiler Nov 2012 CTP,当我尝试编译时:

我收到以下错误:

如果我内联它编译的函数并做我想做的事,但我必须把函数放在头文件中

但以下代码编译没有错误:

所以问题是我怎样才能用可变参数模板实现同样的目标

编辑:

正如建议的那样,在 Microsoft Connect 上提交了错误报告,ID 为:771567

向量示例也很糟糕(它会给出<std::_Simple_types<int>,std::_Vector_val>,但它确实可以编译),但是如果您使用一对和模板参数尝试它:

你会明白<F,G,std::pair>这就是我的意思

0 投票
1 回答
1512 浏览

c++ - 使用可变参数模板模板进行类型推导和参数传递

多亏了可变参数模板,我不久前实现了 Python 的链函数的 C++ 等价物。该函数用于连续迭代多个容器。这是使用名为 的生成器的函数的旧工作版本ChainedObject,无论它是什么:

以及相应的主要:

那个主要工作得很好。我们不在乎 ChainObject 中有什么问题,所以让我们看看。我尝试使用模板模板来确保使用的不同集合具有相同的功能,并通过以下方式value_type修改了函数:chain

我认为这可以确保我之前的 main 中的listandvector共享相同的类型,但是相反,我从 GCC 4.7.1 收到以下错误:

在函数'int main()'中:

错误:没有匹配函数调用“链(std::vector&,std::list&)”

注:候选人是:

注意:ChainObject<T, Iterables ...> chain(Iterables<T>&& ...) [with T = int; Iterables = {std::vector, std::list}]

注意:没有已知的参数 2 从 ' std::list<int>' 到 ' std::list<int>&&' 的转换

笔记:ChainObject<T, Iterables ...> chain(Iterables<T>&& ...) [with T = int; Iterables = {std::vector, std::list}]

注意:没有已知的参数 2 从 ' std::list<int>' 到 ' std::list<int>&&' 的转换

错误:无法从 '' 推导出 'auto&'

似乎问题出在将参数传递给采用右值引用的函数。但是,我真的不明白为什么我的第一个版本运行良好,并注意使用模板模板的版本。

0 投票
1 回答
146 浏览

c++ - 模板模板功能及参数推导

我遇到了模板模板和参数推导的问题。这是代码:

我希望这可以接受左值和右值,但仅适用于右值。折叠规则“T& && = T&”不适用于这种情况?

当然,我也可以声明左值引用函数,但会降低代码的可读性。

如果你问我为什么需要这个是使用 static_assert 来检查T是否是一个特定的类。如果有更简单的方法,我很乐意更改我的代码,但我想知道模板模板是否可以以这种方式使用。

谢谢

0 投票
2 回答
925 浏览

c++ - 是否可以为模板模板参数定义别名?

我正在尝试使用模板模板来取乐。我有以下课程:

我已将 typeR和定义T<R>为成员类型RatioFullType. 是否可以别名TType

上面的注释行在 g++ 4.7 上给了我以下错误:

我尝试了一些或多或少的随机语法,但没有一个被编译。

谢谢 !

0 投票
2 回答
136 浏览

c++ - 无法完全理解模板模板参数的工作原理

我正在阅读现代 C++ 设计,但无法完全理解模板模板参数的工作原理。

例如,如本文http://www.informit.com/articles/article.aspx?p=376878中给出的, 我们可以使用类型和容器的模板参数创建一个堆栈。

如果我们只使用类型和容器作为模板 Stack 的参数,那么它可能会产生一些问题,例如

在上面的代码中,我可以理解 aStack1 很好,aStack2 和 aStack3 是问题,因为如果 Stack 元素类型和容器元素类型之间的类型不兼容。

根据文章,如果我们使用模板模板参数,这可以解决

我的疑问是 Deque 怎么知道它的元素类型是 std::string 或 List 元素类型是 int???这是通过模板参数推导完成的吗?

在这里,我们正在创建一个类型为 T 的 Deque。如果我们将堆栈定义为

那么我们如何实例化 Stack

0 投票
1 回答
138 浏览

c++ - 来自不同命名空间的模板模板参数可以成为朋友吗?

如果这个问题的标题没有帮助,我深表歉意;如果不给出以下示例,我不知道如何简洁地提出这个问题:

如您所见,Arg2Arg1. 但是,VS 2008 只允许Arg1用作模板参数:

错误是'C<Arg>::i_' : cannot access private member declared in class 'C<Arg>'i_如果公开,一切正常,所以这似乎是一个友谊问题。

当模板模板参数位于不同的命名空间时,导致友谊声明失败的原因是什么?

0 投票
2 回答
5551 浏览

c++ - 将 std::tuple 用于模板参数列表而不是类型列表

我正在尝试调用这样的模板函数:

我知道我可以“简单地”传递元组的类型。这是我所知道的,但这很麻烦,因为我对这个函数做了很多调用,而且元组很长:

所以我尝试了 get 方法的多种实现,但没有成功:

通过模板参数启用

这给了我这个错误:

我不明白为什么缺少模板参数。

所以我尝试了另一种实现:

模板模板命名参数

但后来我得到这个错误:

同样,由于缺少标识符,我不明白错误。

我现在想知道我想要实现的目标是否可能。是否可以使用std::tuple我想要的?或者,还有更好的方法 ?

0 投票
1 回答
1387 浏览

c++ - 在 C++ 中的模板中将类作为非类型参数传递

在我研究的模板中,我们只能有整数参数,即 int、指向其他数据类型的指针以及模板模板参数。

但是在这里,我也可以将一个简单的类也作为模板参数传递。这是有效的还是我的理解是错误的。这是一段代码。

0 投票
2 回答
805 浏览

c++ - 从元组派生类

我有一个这样的 std::tuple :

现在,我想将 t3_tuple 转换为类似的元组:

例如,在我的情况下,t1t2t3是原语,并且Tstd::stack。一般来说,假设可能有t4等等。

当然,我的第二个定义已经解决了这个问题,但我希望推导是自动的:只给定Tand tuple_t,构建我derived_tuple_t。像这样:

这样的事情可能吗?也许是一个简短的解决方案?

0 投票
2 回答
696 浏览

c++ - How to derive a template template class from boost::enable_shared_from_this?

How can one derive a template class with templated type from boost::enable_shared_from_this?

This didn't compile:

Error: 'Myclass' is not a template type.