问题标签 [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.
c++ - 使用类模板时如何删除数组中的项目?
我试图从Remove
函数中删除“GoodBye”,然后打印一个缺少它的列表。
我收到一条错误消息:
错误 1 错误 C2440: 'delete' : 无法从 'std::string' 转换为 'void*
item
是再见。word
将保存被删除的副本。
将“GoodBye”和其他单词添加到的主要功能my_String
。
my_String.Remove
将从:GoodBye
_my_String
c++ - 模板函数和类
我真的对模板感到困惑。如果我有一个模板类并将其作为参数传递给函数,请考虑以下内容:
所以我想创建一个以 Class 作为参数的函数,那么为什么以下内容还不够:
我必须这样做:
另外,假设我采用 2 个模板类的 2 个参数,请考虑以下内容:
我有一个函数,它接受 2 个 ClassA 和 ClassB 类型的参数,写作之间有什么区别:
至
因为两者都有效。
c++ - 为每个 C++ 类模板实例执行一次代码
好的,这是一个复杂的问题。
我有一个多次实例化的 C++ 类模板。对于这些实例中的每一个,我都需要执行一个注册一些运算符的函数。在使用该模板实例的第一个对象之前,每个模板实例只需执行一次(这并不意味着它必须在编译时发生的实例化时执行)。
到目前为止,我是手动完成的。但这是一种痛苦。所以我想自动执行注册功能。
我目前的想法是在构造函数中调用一个受保护的注册方法。然而,每当构造类的实例时,这都需要(小)开销。由于经常这样做,我想避免这种开销。
我还尝试使用静态 RAII 助手成员,但如果未主动访问静态模板类成员,则不会构造它们,因此此尝试失败。
有没有一种方法可以在没有运行时开销的情况下在类模板实例化(通过函数或可能通过 RAII 助手类)上执行代码?
c++ - 明确禁止具体的类模板特化
我有一个类模板:
但是要禁止有界类型的空列表,即variant<>
必须在编译时禁止。我可以执行以下操作:
但不太清楚:如果我的变体库包含大量的头文件,那么上面的特化是否不是一个类的前向声明,在下面的某个地方定义,就不清楚了。在我看来,理想的想象解决方案将是:
这在更大程度上看起来很明确,但可悲的是,反过来又被 C++ 语法所禁止。
满足所描述意图的最明确方式是什么?
c++ - 模板类运算符“未解析的外部”
在我的课上:
没有包括其他非操作员功能,因为它们都可以正常工作。不知道为什么它不起作用。
在源文件中:
和错误:
错误 1 错误 LNK2001:无法解析的外部符号“class MyVector __cdecl operator+(class MyVector,class MyVector)”
错误 2 错误 LNK1120: 1 未解决的外部
编辑:
添加了构造函数。
c++ - 如何使多个模板类具有相同的类型
有两个模板类 A 和 B。如何强制将它们实例化为相同的类型而不将它们与另一个嵌套?例如,如果我定义两个类,如下所示:
那么用户可能会做这样的事情A<int> a;
并且B<float> b;
我想强制 A 和 B 具有完全相同的类型,但我不希望它们相互嵌套。所以当有人使用这两个类时,A 和 B 必须具有相同的类型。有没有办法做到这一点?设计这样的课程有什么好的做法?
谢谢
c++ - 无法从类模板输出字符串
我一直在尝试让我的课程模板为我打印出一个字符串。但是我得到了一个error C679: No operator found which takes a right hand operand of type std:: string
. 我尝试了各种方法来使这个错误消失。
c++ - 范围解析而不是 . 模板类参数的运算符
下面给定的代码编译成功:
Scope 解析运算符如何在这里工作而不是. operator
? 我们是否允许访问这样的非静态成员?
参考:C++ 模板完整指南,第 8.3.3 节非类型参数
c++ - 类模板,独立于其参数的排列
考虑一个类模板和辅助枚举类,定义如下:
问题是,如何重新定义 A 类,它独立于其论点的排列。我使用支持 C++11 的 Dev C++。
[编辑]
比如新版本的A应该支持
版本,并且它们都是相同的,即它们生成相同的类。
c++ - 如何处理同一模板多重继承中的歧义?
我正在开发自己的 WinAPI 包装库,它负责处理与 GUI 相关的所有内容。我在 Android 平台上看到了一些移植的解决方案(视图、测量/布局/绘制通道、从 XML 中“膨胀”UI)。
现在:我不想重复自己并手动添加静态方法,例如 create 和 inflate 到每个View
(Button
,GridView
等TextView
)。
基View
类派生自(将 View 作为 T 传递):
子类派生自 View 和 ICreatable:
Button
现在我必须以某种方式处理歧义 - Button 具有ICreatable ,其中 View 和 Button 都作为 T 传递。我想ICreatable<View>
用ICreatable<Button>
.
- 这在 C++ 中是否可行?
- 如果没有,是否有另一种方法可以实现这种“自动静态方法添加”?
- 我应该回到我的第一个(可怕的)想法,即为每个视图手动添加静态 create() 和 inflate() 方法吗?
编辑:经过一番讨论,我已经#define
将这些方法缩短为一行:
上面的代码是实现我想要的最好的方式(嗯,我认为是最懒惰的方式)。