问题标签 [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++ - 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>
这就是我的意思
c++ - 使用可变参数模板模板进行类型推导和参数传递
多亏了可变参数模板,我不久前实现了 Python 的链函数的 C++ 等价物。该函数用于连续迭代多个容器。这是使用名为 的生成器的函数的旧工作版本ChainedObject
,无论它是什么:
以及相应的主要:
那个主要工作得很好。我们不在乎 ChainObject 中有什么问题,所以让我们看看。我尝试使用模板模板来确保使用的不同集合具有相同的功能,并通过以下方式value_type
修改了函数:chain
我认为这可以确保我之前的 main 中的list
andvector
共享相同的类型,但是相反,我从 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&'
似乎问题出在将参数传递给采用右值引用的函数。但是,我真的不明白为什么我的第一个版本运行良好,并注意使用模板模板的版本。
c++ - 模板模板功能及参数推导
我遇到了模板模板和参数推导的问题。这是代码:
我希望这可以接受左值和右值,但仅适用于右值。折叠规则“T& && = T&”不适用于这种情况?
当然,我也可以声明左值引用函数,但会降低代码的可读性。
如果你问我为什么需要这个是使用 static_assert 来检查T是否是一个特定的类。如果有更简单的方法,我很乐意更改我的代码,但我想知道模板模板是否可以以这种方式使用。
谢谢
c++ - 是否可以为模板模板参数定义别名?
我正在尝试使用模板模板来取乐。我有以下课程:
我已将 typeR
和定义T<R>
为成员类型Ratio
和FullType
. 是否可以别名T
为Type
?
上面的注释行在 g++ 4.7 上给了我以下错误:
我尝试了一些或多或少的随机语法,但没有一个被编译。
谢谢 !
c++ - 无法完全理解模板模板参数的工作原理
我正在阅读现代 C++ 设计,但无法完全理解模板模板参数的工作原理。
例如,如本文http://www.informit.com/articles/article.aspx?p=376878中给出的, 我们可以使用类型和容器的模板参数创建一个堆栈。
如果我们只使用类型和容器作为模板 Stack 的参数,那么它可能会产生一些问题,例如
在上面的代码中,我可以理解 aStack1 很好,aStack2 和 aStack3 是问题,因为如果 Stack 元素类型和容器元素类型之间的类型不兼容。
根据文章,如果我们使用模板模板参数,这可以解决
我的疑问是 Deque 怎么知道它的元素类型是 std::string 或 List 元素类型是 int???这是通过模板参数推导完成的吗?
在这里,我们正在创建一个类型为 T 的 Deque。如果我们将堆栈定义为
那么我们如何实例化 Stack
c++ - 来自不同命名空间的模板模板参数可以成为朋友吗?
如果这个问题的标题没有帮助,我深表歉意;如果不给出以下示例,我不知道如何简洁地提出这个问题:
如您所见,Arg2
是Arg1
. 但是,VS 2008 只允许Arg1
用作模板参数:
错误是'C<Arg>::i_' : cannot access private member declared in class 'C<Arg>'
。i_
如果公开,一切正常,所以这似乎是一个友谊问题。
当模板模板参数位于不同的命名空间时,导致友谊声明失败的原因是什么?
c++ - 将 std::tuple 用于模板参数列表而不是类型列表
我正在尝试调用这样的模板函数:
我知道我可以“简单地”传递元组的类型。这是我所知道的,但这很麻烦,因为我对这个函数做了很多调用,而且元组很长:
所以我尝试了 get 方法的多种实现,但没有成功:
通过模板参数启用
这给了我这个错误:
我不明白为什么缺少模板参数。
所以我尝试了另一种实现:
模板模板命名参数
但后来我得到这个错误:
同样,由于缺少标识符,我不明白错误。
我现在想知道我想要实现的目标是否可能。是否可以使用std::tuple
我想要的?或者,还有更好的方法 ?
c++ - 在 C++ 中的模板中将类作为非类型参数传递
在我研究的模板中,我们只能有整数参数,即 int、指向其他数据类型的指针以及模板模板参数。
但是在这里,我也可以将一个简单的类也作为模板参数传递。这是有效的还是我的理解是错误的。这是一段代码。
c++ - 从元组派生类
我有一个这样的 std::tuple :
现在,我想将 t3_tuple 转换为类似的元组:
例如,在我的情况下,t1
、t2
和t3
是原语,并且T
是std::stack
。一般来说,假设可能有t4
等等。
当然,我的第二个定义已经解决了这个问题,但我希望推导是自动的:只给定T
and tuple_t
,构建我derived_tuple_t
。像这样:
这样的事情可能吗?也许是一个简短的解决方案?
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.