问题标签 [template-classes]

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 投票
2 回答
813 浏览

c++ - 如何在非可变模板类中形成可变模板函数?

所以,当我一直在学习 C++ 中的模板时,我决定想出一些不寻常的情况,看看我是否能让它们工作。(不,这不切实际 - 只是为了玩语言!)我创建了一个模板类,它包含一个 type 的值T,带有一个可变参数函数模板,它返回参数包中的一个std::pairT和最大值。但是,我无法编译它。这是我写的...

header.h中:

source.cpp中:

这些是我产生的错误:

所以这就是我的想法:

  • 显然,编译器无法确定mypair(初始化失败)的类型。但为什么?它知道in的类型和TinMyClass的类型。明确说明修复了这个错误,但留下了其他错误(潜在问题的症状)。T2pairingFunc()std::pair<int, float>
  • “无法专门化函数模板”......我猜这意味着它无法根据给定的类型返回类型?如果是这样,为什么不呢?
  • “必须在这种情况下扩展参数包” - 我不确定这个。通过将包放入数组中不会发生这种情况吗?

此外,我想通过类似的方式强制提供至少一个参数(T2&& head, T2&&... tail),但我认为将这两个参数都放入数组或向量中可能会很讨厌,而且我不确定如何只处理单个可变参数是。所以我猜这只是一个“奖金”。

0 投票
0 回答
25 浏览

c++ - c++模板类操作符<<重载

我在尝试重载<<模板类的运算符时遇到问题,我收到error LNK2019: unresolved external symbol错误。代码如下:

所有代码都在同一个 .cpp 文件中。它编译得很好,但似乎与该cout<<S行存在链接问题。如果我把它注释掉,其他一切都很好。我搜索了其他一些关于类似问题的帖子,但没有找到答案。我可以使它工作的唯一方法是将定义复制operator<<到的定义中,struct subvec<T>而不是将其放在外面。但是我的定义operator<<仍然在同一个文件中。我应该如何解决这个问题?无论如何,我最终不得不分离出一个头文件。谢谢!

0 投票
1 回答
92 浏览

c++ - 作为模板参数的函数: if(T receive 2 param)T(a,b); 否则 T(a);

如何使模板类Collection<K,T>接收一个函数T- 可以具有签名T(K)T(K,int)- 作为模板参数,然后根据函数的签名有条件地编译?

这是可以接收 1 个签名的现有代码:Collection<K,HashFunction(K)>

我希望它支持Collection<K,HashFunction(K,int)>.

我是否别无选择,只能创建 2 个不同的类:Collection1& Collection2
需要超过 c++11 的答案是可以的,但不太可取。

我觉得它可能可以通过使用“默认参数”技巧来解决。

0 投票
2 回答
8621 浏览

c++ - 模板类类型特定函数

好的,所以我有这个模板类,它有点像单向列表。

它有这个内部功能打印

你可以猜到,它从头到尾打印列表内容;但是,由于模板可以将类作为 T,可以想象,对于这种情况,我需要不同的 Print() 实现。例如,我有另一个类 Point

所以我想要专门为点设计的打印。我试过这个:

但编译器告诉我

尽管

对我来说,这似乎是相同的功能。怎么了?以及如何编写特定于 T 的模板类函数?

0 投票
1 回答
265 浏览

c++ - 具有另一个模板的模板特化

假设我有两个模板类

我怎样才能Foo专攻Bar<T>?语法是什么??是吗

或者

或任何其他语法?

0 投票
2 回答
295 浏览

c++ - 覆盖的 << 运算符无法识别

我试图覆盖<<运算符,但编译器似乎无法识别我的实现,而是试图将其解释为位移。我已经尝试过使用参数类型 ( const T&, T&, T, const T) 无济于事。

报告的错误是:

如果我将作用于类的相同运算符定义为值,它就可以工作......

0 投票
1 回答
65 浏览

c++ - 方法作为方法的默认参数

我目前正在为 C++ 课程开发一个 Set 类,它是从vector<T>.

在某个时候,我需要实现一个调用的函数,该函数index()显然会返回(如果集合包含它)这些集合中对象的索引。在编写整个课程时,我需要重载这些index()方法,这两个方法都是公共的。所以这是我的两种方法:第一种。有3个参数:

第二个有一个参数:

关键是我不想写这两种方法,如果可能的话,它可以合二为一。我考虑了该index()方法的默认值,因此我将方法头编写为:

这给了我错误: Elementfunction can't be called without a object

在考虑了该错误之后,我尝试将其编辑为:

但这给了我错误:You're not allowed to call >>this<< in that context.

也许我错过了一件事情,但是如果你们中的任何人可以告诉我是否可以将方法作为默认参数调用,请告诉我。

0 投票
2 回答
559 浏览

c++ - .hpp 和 .cpp 中的 C++ 模板类运算符没有匹配函数

我有两个要编译的文件。它们如下:

数组.hpp

数组.cpp

我完全不清楚为什么对操作员的调用会引发错误。为函数“print”实例化的两种输入类型都明确定义了运算符。是不是因为编译器先在头文件中查找,找不到指定类型的操作符实例。在头文件中定义运算符也没有多大用处。这(据我所知)再次会引发错误,因为在头文件中实现了两个具有相同名称但返回类型不同的函数(运算符)。

该怎么办?

0 投票
1 回答
49 浏览

c++ - 试图了解模板类是如何工作的

我已经尽我所能完成了这项任务,但我很确定存在根本问题。我将期待您对如何使其变得更好的评论。问题定义如下: 两个类。 XBoxGameWorldPeace

模板类称为Gift. 有一种方法称为shake(). 在里面shake(),我们将调用MakeNoise()我们的模板类型的一个实例T。只有XBoxGame作为MakeNoise()一种方法。

现在,main()只要您尝试制作一个Gift包含“”的XBoxGame“”(看看我在那里做了什么?),您就会在编译时知道它是否有效。尝试Gift<WorldPeace>,它不会编译,因为MakeNoise()缺少。你上交的应该只有正确的模板 XBoxGame类调用shake()WorldPeace()编译,但只是因为它没有在main().

最终结果“您只能在礼物中放置一个会引起轰动的课程”。我写的代码:

主要的:

0 投票
2 回答
651 浏览

c++ - 减少类模板特化中的代码重复(数组)

如何减少模板专用类的代码重复?

我正在尝试创建一个类 ( MyArray),它的行为类似于std::vector但在某些函数中接收原始指针作为参数。

这是它的简化版本:-

是一个测试:-

问题: 请演示一种优雅的方法来减少MyArray.

我希望的解决方案可能如下所示:-

可能存在一些内存泄漏/损坏。为简单起见,请忽略它。
我只想要一个想法/粗略的指南。(无需提供完整的可运行代码,但我不介意)

在现实生活中,有 20 多个函数,MyArray我希望对许多类进行相同的重构。

编辑:我(次要)编辑了一些代码和标签。感谢 AndyG 和 Jarod42。