问题标签 [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 投票
0 回答
204 浏览

c++ - CMake Linker:即使库已链接,也未定义引用

我正在将 CMake (CLion) 用于类项目。我尝试了以下解决方案,但它们不起作用:123

我为一个类项目创建了一个 HeapSort 类,我需要使用它来对字符串向量(字典)进行排序。我在这本字典中创建了一个 HeapSort 类的实例,如下所示:

我不断获得对构造函数和heapSort()函数的未定义引用,其中类定义如下(heapSort()类似):

堆.cpp

堆.h

CMakeLists.txt

现在,我将所有文件放在一个文件夹中。此时我应该添加什么CMakeLists.txt?我已经尝试过add_library/target_link_library(使用不同的命令),添加include_directories,并且我尝试在我的目录中分别构建每个类,并将它们链接到主可执行文件。我是否也需要重新组织我的目录?

编辑:添加 Heap.cpp 和 Heap.h

0 投票
4 回答
3343 浏览

c++ - overriding the template base method in derived class?

Suppose I have a base class as below:

then, I create a Derived class as below, and override the do_something() method:

I know virtualization does not work in class templates, and I am just hiding the implementation of the methods. but I do want to store a bunch of derived classes and base classes into a vector, (I do not want to use type erasure, or polymorphism),

my question is, given that static_cast of Derived class to base class gives me the do_something of based class, Is there any way that I can store them as base classes while each has their implementation of do_something() class ?

0 投票
2 回答
191 浏览

c++ - 为什么我不能像 std::string::size_type 那样使用 QList::size_type?(模板参数错误)

在我的 for 循环中声明迭代器时研究无符号与有符号整数比较警告时,我读到了这个

只要有可能,请使用您将与之比较的确切类型(例如,std::string::size_type与 astd::string的长度进行比较时使用)。

我有一个QList<T>我想迭代,使用上述方法声明迭代器:

它给了我一个编译器错误:

为什么我不能以同样的方式使用它?这是由我还是由 Qt 框架及其类型引起的?QList::size_type在这种情况下,什么是好的替代品,QList::size()只返回一个普通的旧的int,我想使用它;但我阅读了上面链接的帖子,这让我不确定。

0 投票
1 回答
150 浏览

c++ - C++17 类模板推导 const-ness

我正在尝试使用新的 c++17 类模板推导,并且在我应用 const 之前一切似乎都可以正常工作。这是我面临的麻烦的一个小例子:

似乎当 const X 推断其类型时,不会执行 const-ness。我知道这是可能的:

但这会使每个推导的类型都变成 const X。

如果有人有任何信息或帮助,将不胜感激!

编辑 我正在使用 GCC-7.1.0

0 投票
1 回答
220 浏览

c++ - 受保护的析构函数禁止在堆栈上创建派生类的对象?

在这个关于 Curiously Recurring Template Patten 的网页中,派生类可以在堆栈上实例化(对象计数器示例,其中基类模板具有受保护的析构函数):CRTP-wiki ..我自己编译。

但是这个答案说使基类的析构函数受保护将禁止在堆栈上实例化派生类:答案

正如已经回答的那样,Poco::RefCountedObject 具有受保护的析构函数,因此不能在堆栈上创建从它继承的所有类......

所以,

(1)这个答案错了​​吗?还是我误会了?

(2)为什么CRTP的例子让析构函数受保护?是否意味着禁止在堆栈上实例化基类模板的特化?我可以在堆上实例化基类模板的特化吗(我试过了,我不能,但不知道为什么)?

提前致谢!

0 投票
0 回答
145 浏览

c++ - std::pair 类模板已被声明为非类模板

我正在尝试声明两个具有与以下相同结构的结构。

它会生成错误“std::pair”:类模板已被声明为非类模板。

请帮助我,为什么会发生?(我正在使用 vc12(Visual Studio 2015))

0 投票
1 回答
305 浏览

c++ - 匿名临时变量和类模板参数推导 - gcc vs clang

考虑以下代码片段:

g++ 7愉快地创建了一个类型的临时对象foo,推导T = int.

clang++ 5和6拒绝编译代码:

wandbox 上的实时示例


这是一个铿锵的错误,还是标准中的某些东西阻止了类模板参数推导用于未命名的临时对象?

0 投票
2 回答
142 浏览

c++ - 模板和重载

在这里,我有一个类的公共接口。底层数据结构无关紧要。Key1当并且Key2是不同类型时,一切都会正常工作。如果它们最终是相同的类型,那么重载可能是不可能的。我这样想对吗?

如果我是,有没有办法在保持签名尽可能干净的同时分离重载?

编辑:这里有一个更深入的样本

0 投票
2 回答
773 浏览

c++ - CRTP 没有编译时检查吗?

我试图使用Curiously Recurring Template Pattern实现静态多态性,当我注意到static_cast<>通常在编译时检查一个类型是否实际上可以转换为另一个类型时,它错过了基类声明中的错字,从而允许代码向下转换基类类到它的兄弟姐妹之一:

程序的输出是:

为什么演员表工作没有错误?如何进行编译时检查以帮助解决此类错误?

0 投票
1 回答
741 浏览

c++ - 构造函数语法缺少形式参数

我正在编写一个包含对象数组的类模板。我收到一条错误消息,提示“构造函数语法缺少形式参数”。该错误与代码行 DT List[100] 相关;