问题标签 [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 回答
2972 浏览

c++ - 源代码中类的 C++ 部分特化而不是标头

Foo.h

Foo.cpp

当我编译时,部分专用的构造函数会引发错误

用于声明的嵌套名称说明符 'Foo::' 不引用类、类模板或类模板部分特化

我想我需要在某个地方声明这个部分专业化的类,但我不想继续重新声明同一个类......即我不想将以下内容放在头文件中:

因为那时我无法构造使用 Foo_Beta 构造函数的Foo() 。

我试过了

但这也不能编译。

本质上,声明一个类的部分特化而不重新声明该类的所有内部函数的语法是什么?

0 投票
3 回答
85 浏览

c++ - 流的不同状态的定义(C++)

我知道它ios_base有一个流的状态声明,比如
ios_base::goodbit(错误状态)
ios_base::ate(文件打开模式状态)
等等。
我有兴趣知道这些成员函数的定义是ios_base
简单的还是类模板?它们是如何实施的?哪一个有父类(如果有)?

0 投票
0 回答
1327 浏览

c++ - Doxygen 继承图:模板类

我目前使用 doxygen 为项目创建文档。最近,这个项目的一小部分开始使用模板编程,由 doxygen 创建的继承图并不真正适合文档的其余部分。

一个小例子:

创建窗体的继承图

在此处输入图像描述

这真的很难阅读imo。我宁愿看到像这样的更简约的图片

在此处输入图像描述

,跳过“冗余”课程A<double>, A<int>, A<float>, A<bool>。有没有办法做到这一点?

在我的 Doxyfile 中,唯一的非默认设置是

0 投票
0 回答
27 浏览

c++ - g++ 显示模板类的方法的“未定义引用”,但它们匹配它们的原型

我有一个这样定义的模板类:

关闭列表.h

然后,我在另一个文件中定义了函数,如下所示:

关闭列表.cpp

如果我更改方法实现,例如添加或删除它const后面的,g++ 会向我显示该方法与任何原型都不匹配的错误。所以我猜 g++ 找到了正确的函数原型。但我得到这些错误:

注意:我看了为什么模板只能在头文件中实现?但由于问题是从 2009 年开始的,而且我使用的是 C++11,我想知道这是否仍然如此。像这样显示的其他网页(抱歉是德语)显示了在类定义之外定义成员的代码。

0 投票
2 回答
205 浏览

c++ - 如何正确使用模板类的嵌套类?

全部!我正在尝试实现一个简单的模板类二叉搜索树。我在函数定义方面遇到了几个问题。以下是我的 BST 类代码

如您所见,对于void insert(T key, BST<T>::TreeNode* leaf)andBST<T>::TreeNode* BST<T>::search(T key, TreeNode* leaf)函数,我需要对TreeNodeclass 执行操作,例如返回它的对象或将其传递给函数,这是在 class 中定义的嵌套类型BST。我得到的错误是语法错误,但我不知道我在代码中做错了什么。任何意见或建议将不胜感激!

0 投票
0 回答
20 浏览

c++ - 嵌套在模板类中的普通类的重载运算符%,定义在类之外

我在模板类之外定义 operator% 时遇到问题。我在内部解决了这个问题,但我想知道为什么它不能以另一种方式工作。

这是我的代码:

编译器似乎将 type_value 视为不同于 type 的东西,他为什么呢?

0 投票
2 回答
1302 浏览

c++ - 如何创建仅包含主文件和模板头 (C++) 的 makefile

我正在尝试创建一个将编译两个文件的生成文件: -main.cpp -queue.h 在头文件内部,我有一个模板队列类的完整实现。主文件包括头文件。

我可以通过在终端(在 Mac 上)中输入以下代码来测试此代码:

我可以毫无问题地运行程序(./queue)。

现在对于这个项目,它需要通过在终端中输入“make”来编译。对于以前的项目,我使用了这样的东西:

但是上面的例子有一个 main.cpp、sDeque.cpp 和 sDeque.h。这很有效,因为我可以创建目标文件,但我认为我不能仅从头文件创建目标文件。

对于手头的任务,我只有主文件和头文件(因为它是一个模板类)。我如何为此制作makefile?

0 投票
1 回答
901 浏览

c++ - 有没有办法打印模板类对象

我正在尝试创建用于存储不同值的模板类,例如,我有一个列表,它可以保存任何类型的值。

有没有办法打印数据的价值。或者以某种方式指定 T 类型应该具有打印方法。我有点困惑,因为我来自 Java。在 Java 中,每个类都继承自具有toString()方法的 Object。如何打印仅在运行时解析的 T 类型的值。
C++ 中的解决方案是什么?或者我必须使用某些类作为具有所需方法的基类(虚拟)。
如果有任何帮助,我将不胜感激。

0 投票
1 回答
503 浏览

c++ - Why would a template class have an unused type?

I'm reviewing the boost units library and I am puzzled why the boost::units::unit class has an extra template parameter. Here is the example:

http://www.boost.org/doc/libs/1_57_0/boost/units/unit.hpp

The class is used to add dimensions to dimension system.

What purpose would "Enable" serve in this case?

0 投票
1 回答
214 浏览

c++ - 模板基类的静态成员不会导出到共享库

我有一个从模板类“TModelManager”派生的“ModelManager”类。他们的声明如下:

有两个共享库,“shared”和“server”。

在“共享”库中,DLLNETWORK 相当于 linux 系统上的 '__attribute__((visibility("default")))',用于导出类。模板类的成员是这样定义的(在 cpp 文件中):

在“服务器”库中,DLLNETWORK 是一个空定义,以确保类被导入。“服务器”库与“共享”库链接。

这编译得很好。

在运行时,“服务器”库被动态加载,这也导致“共享”库被加载。但是,这会导致以下错误:

我在“服务器”库上使用了“ldd”实用程序,它确认它与“共享”库链接,并且可以找到它。

然后,我使用“nm”实用程序查找与 TModelManager 类相关的所有符号。这是结果:

一切都在那里,除了“m_marked”成员。“m_models”-member 被发现两次,但地址不同。

我真的完全不明白,'m_marked'-member 的定义方式与'm_models'-member 相同,那为什么不导出呢?为什么“m_models”成员出现两次?

// 编辑:

我没有注意到“m_models”的 nm 结果前面的“U”,这意味着它们是未定义的。

我对它们的定义有问题吗?