问题标签 [template-function]

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 投票
6 回答
1521 浏览

c++ - 没有使用模板功能从`int`自动转换为`float`

经过多年的 C++ 编码,今天我被问到一个简单的问题,但我确实找不到它的答案,所以我在这里。

除了想知道为什么会发生此错误之外,我想知道如何通过仅修改模板函数(不更改main()函数)来解决以下错误

0 投票
2 回答
23982 浏览

c++ - 如何编写一个模板函数,它接受一个数组和一个指定数组大小的 int

在一次大学练习中,我被要求编写一个模板函数“print();”,它有两个参数,1:一个泛型类型的数组,2:一个指定数组大小的 int。然后该函数应将数组中的每个项目打印到控制台。我在函数参数方面遇到了一些问题。我目前拥有的代码是:

在 main() 中:

显然,将 Array 作为参数并没有返回值,所以我不确定还能做什么。有任何想法吗?

0 投票
1 回答
709 浏览

c++ - 只读变量不可赋值 c++ 模板函数

我正在尝试编写自己的模板交换函数,但这段代码有问题:

在这两行:a = bb = tmp得到一个错误read only variable is not assignable。我正在使用 Xcode。

UPD:这是完整的代码:

如您所见,函数内部调用了新的交换quick_Sort函数

0 投票
2 回答
321 浏览

c++11 - 运行时用于 json 反序列化的模板函数类型转换

我想编写一个函数,将数组的 json 表示反序列化为 std::vector。我正在使用的 json 库是 Facebook 的愚蠢库的一部分。我想实现以下目标,但不幸的是它不起作用:

在上面的代码中, jsonField 是数组字段的表示。所以代码只是尝试循环遍历数组;然后对于每个元素;它将尝试推回通用向量:向量。问题是代码无法编译,因为它会抱怨它不能从 std::string 转换为 int; 当 T=int;

我不确定如何编写这样的通用函数而不需要实现 4 个方法重载函数。static bool deserializeHelper(std::string fieldName, vector< int >& structField, const folly::dynamic& jsonObj) ....

谢谢。

0 投票
1 回答
1794 浏览

c++ - 如何检查结构类型或字段是否存在

我有以下代码来计算“倍数”(表示倍数的结构)向量的最大绝对值 - 在我的例子中,我有std::pair's 和我自己的Triple结构,它与前者基本相同,但有 3 个字段。

尽管尚未对此进行测试,但我知道在将std::pair结构传递给函数时这将不起作用,因为一对中没有third字段。我将如何更改此代码,以使用于获取和检查third字段的代码块仅“可用”并在传递的结构为 a 时执行Triple

0 投票
2 回答
65 浏览

c++ - 问题将模板类型传递给函数并用于局部变量赋值 c++

我有以下代码:

我可以用一个声明来调用它,例如

或者

whereTriple只是一个我用 3 个元素定义的结构(本质上与 3 个字段相同std::pair但扩展为 3 个字段)。此外,分别是和的函数diffusionLimitedAggregateRandomWalk2DdiffusionLimitedAggregateRandomWalk3D返回类型。std::vector<std::pair<int,int>>std::vector<Triple<int,int,int>>

问题是,当我使用上述任一语句调用时,我收到以下错误(发生在赋值语句中aggResults = ...):

和类似的情况Triple<int,int,int>。据我了解,这意味着我需要为这两个结构使用重载的赋值运算符 - 但是我认为这不是问题所在,因为之前在我的程序中正确使用了以下语句:

所以我知道我可以将 DLA 方法的结果分配给正确类型的变量,但是如果我通过使用将类型传递给模板函数来尝试它,编译器会抱怨,如上所示。

这里发生了什么,我将如何解决这个问题?

0 投票
3 回答
42 浏览

c++ - 搜索具有特定字段的成员的通用范围

那是我的模板功能:

我希望它能够将玩家作为矢量和地图,或任何其他 STL。我不能使用算法查找,因为我正在搜索一个“玩家”,他的内部字段 id 与给定参数相同。有什么办法可以完成这项工作吗?

它抱怨:

因为它不知道 player 是指向 Player 类的指针。

0 投票
1 回答
38 浏览

c++ - 将函数的 vector + map 版本合并为单个兼容版本

这些是我的两个重载函数,用于std::map容器和std::vector具有 Lambda 表达式的容器。

有没有人看到一种使它成为模板函数的方法,它可以检查 Lambda 表达式的pair类型(在我的情况下是对的第二个)和常规范围类型(​​如vector,deque等)。

0 投票
2 回答
7667 浏览

c++ - 如何专门化模板成员函数?

我有以下模板方法:

但我得到了那些奇怪的链接器错误:

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/exception:62: `void MyStruct::readField 的多重定义(std::basic_istream >&, unsigned char&)' ../Lib/obj/MyStruct.o:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../。 ./include/c++/4.4.7/exception:62: 首先在这里定义 collect2: ld 返回 1 退出状态 make: *** [Lib] Error 1

我怎样才能专门化这个成员函数?

编辑

这种方法有效:

或使用inlines 或在课堂外使用inline

0 投票
0 回答
431 浏览

c++ - C++11:通过基类指针完美前向派生类方法

我希望通过基类指针将参数包完美地转发到包含特定类型方法指针的派生类,然后使用完美转发的参数包调用该方法指针。该类Sender<cARGS>具有容器std::set<ReceiverBase<cARGS>*>。我想用相同的参数包值迭代容器(我知道该怎么做)。不同ReceiverBase<cARGS>*会有不同的派生类( Receiver<cPARENT, cARGS>)方法指针类型,但是参数包类型会是一样的(派生类中的cPARENT类型就是方法指针类型)。在复制参数包的情况下,我可以按预期工作。现在我希望像这样添加完美的转发:

我了解我不能使用虚拟模板方法。我尝试使用双重调度访问者模式,但是当我不知道保存方法指针的类的类型时,我不确定如何执行此操作。