问题标签 [class-template]

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 回答
3798 浏览

c++ - 使用类模板时如何删除数组中的项目?

我试图从Remove函数中删除“GoodBye”,然后打印一个缺少它的列表。

我收到一条错误消息:

错误 1 ​​错误 C2440: 'delete' : 无法从 'std::string' 转换为 'void*

item是再见。word将保存被删除的副本。

将“GoodBye”和其他单词添加到的主要功能my_String

my_String.Remove将从:GoodBye_my_String

0 投票
2 回答
85 浏览

c++ - 模板函数和类

我真的对模板感到困惑。如果我有一个模板类并将其作为参数传递给函数,请考虑以下内容:

所以我想创建一个以 Class 作为参数的函数,那么为什么以下内容还不够:

我必须这样做:

另外,假设我采用 2 个模板类的 2 个参数,请考虑以下内容:

我有一个函数,它接受 2 个 ClassA 和 ClassB 类型的参数,写作之间有什么区别:

因为两者都有效。

0 投票
1 回答
1778 浏览

c++ - 为每个 C++ 类模板实例执行一次代码

好的,这是一个复杂的问题。

我有一个多次实例化的 C++ 类模板。对于这些实例中的每一个,我都需要执行一个注册一些运算符的函数。在使用该模板实例的第一个对象之前,每个模板实例只需执行一次(这并不意味着它必须在编译时发生的实例化时执行)。

到目前为止,我是手动完成的。但这是一种痛苦。所以我想自动执行注册功能。

我目前的想法是在构造函数中调用一个受保护的注册方法。然而,每当构造类的实例时,这都需要(小)开销。由于经常这样做,我想避免这种开销。

我还尝试使用静态 RAII 助手成员,但如果未主动访问静态模板类成员,则不会构造它们,因此此尝试失败。

有没有一种方法可以在没有运行时开销的情况下在类模板实例化(通过函数或可能通过 RAII 助手类)上执行代码?

0 投票
2 回答
209 浏览

c++ - 明确禁止具体的类模板特化

我有一个类模板:

但是要禁止有界类型的空列表,即variant<>必须在编译时禁止。我可以执行以下操作:

但不太清楚:如果我的变体库包含大量的头文件,那么上面的特化是否不是一个类的前向声明,在下面的某个地方定义,就不清楚了。在我看来,理想的想象解决方案将是:

这在更大程度上看起来很明确,但可悲的是,反过来又被 C++ 语法所禁止。

满足所描述意图的最明确方式是什么?

0 投票
1 回答
213 浏览

c++ - 模板类运算符“未解析的外部”

在我的课上:

没有包括其他非操作员功能,因为它们都可以正常工作。不知道为什么它不起作用。

在源文件中:

和错误:

  1. 错误 1 ​​错误 LNK2001:无法解析的外部符号“class MyVector __cdecl operator+(class MyVector,class MyVector)”

  2. 错误 2 错误 LNK1120: 1 未解决的外部

编辑:

添加了构造函数。

0 投票
2 回答
1566 浏览

c++ - 如何使多个模板类具有相同的类型

有两个模板类 A 和 B。如何强制将它们实例化为相同的类型而不将它们与另一个嵌套?例如,如果我定义两个类,如下所示:

那么用户可能会做这样的事情A<int> a;并且B<float> b;

我想强制 A 和 B 具有完全相同的类型,但我希望它们相互嵌套。所以当有人使用这两个类时,A 和 B 必须具有相同的类型。有没有办法做到这一点?设计这样的课程有什么好的做法?

谢谢

0 投票
1 回答
40 浏览

c++ - 无法从类模板输出字符串

我一直在尝试让我的课程模板为我打印出一个字符串。但是我得到了一个error C679: No operator found which takes a right hand operand of type std:: string. 我尝试了各种方法来使这个错误消失。

0 投票
1 回答
360 浏览

c++ - 范围解析而不是 . 模板类参数的运算符

下面给定的代码编译成功:

Scope 解析运算符如何在这里工作而不是. operator? 我们是否允许访问这样的非静态成员?

参考:C++ 模板完整指南,第 8.3.3 节非类型参数

0 投票
2 回答
281 浏览

c++ - 类模板,独立于其参数的排列

考虑一个类模板和辅助枚举类,定义如下:

问题是,如何重新定义 A 类,它独立于其论点的排列。我使用支持 C++11 的 Dev C++。

[编辑]

比如新版本的A应该支持

版本,并且它们都是相同的,即它们生成相同的类。

0 投票
1 回答
82 浏览

c++ - 如何处理同一模板多重继承中的歧义?

我正在开发自己的 WinAPI 包装库,它负责处理与 GUI 相关的所有内容。我在 Android 平台上看到了一些移植的解决方案(视图、测量/布局/绘制通道、从 XML 中“膨胀”UI)。

现在:我不想重复自己并手动添加静态方法,例如 create 和 inflate 到每个ViewButtonGridViewTextView)。

View类派生自(将 View 作为 T 传递):

子类派生自 View 和 ICreatable:

Button现在我必须以某种方式处理歧义 - Button 具有ICreatable ,其中 View 和 Button 都作为 T 传递。我想ICreatable<View>ICreatable<Button>.

  • 这在 C++ 中是否可行?
  • 如果没有,是否有另一种方法可以实现这种“自动静态方法添加”?
  • 我应该回到我的第一个(可怕的)想法,即为每个视图手动添加静态 create() 和 inflate() 方法吗?

编辑:经过一番讨论,我已经#define将这些方法缩短为一行:

上面的代码是实现我想要的最好的方式(嗯,我认为是最懒惰的方式)。