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

c++ - 转发参考和模板模板

考虑这两个模板函数:

为什么前者接受左值(通过使用转发引用)而后者不接受?


看起来身份别名模板可以作为转发参考吗?也可能与此有关,但它似乎涵盖了转发引用限制的不同方面。

0 投票
0 回答
89 浏览

c++ - c++模板类成员特化和继承

我想写下一组类,其中有:

  • 一个纯虚拟类,它包装了任何类型的对象及其相关的 getter。
  • 为我需要的每种对象提供一个或多个类,扩展虚拟对象并覆盖 getter 以使其专业化。

包装器的模板类解决​​方案似乎适合这种情况,但我必须在两种不同的情况下使用它:

  • 第一个不知道包装器的实现。Wrapper<AnyObj> var;在这种情况下,我应该声明 aAnyObj代表任何类名(如?在 Java 中)。据我所知,你不能在 C++ 中做到这一点。
  • 第二个仅限于特定的包装器实现。在这种情况下,我需要 getter 返回具有确切类型的包装对象(而不是向下转换)。

如果我是对的,我不能使用模板类,而且,包装器不会有protected: T* wrappedObject成员。

我不知道我是否被困在 Java 方法中,从一开始就错误地思考,或者错过了什么。

任何建议表示赞赏。

0 投票
2 回答
3648 浏览

c++ - C++ - 可以返回不同类型的模板函数?

我正在编写一段代码,允许用户按不同类型(double// stringdate自定义类))进行搜索。这涉及到一个readInSearchCriteria()我试图设置为模板的方法。我已经对模板函数进行了一些研究,这是我目前所拥有的:

我在程序中的某个时刻调用了它来处理double这样的:

但是,当我尝试在 a 上调​​用它时string,编译器给出了以下错误:

不存在将“int”转换为“std::basic_string, std::allocator>”的合适构造函数

有人可以就这里可能出现的问题向我提供任何建议吗?

0 投票
0 回答
80 浏览

c++ - 如何使用一个使用 2 组括号的函数,例如 add_one(x)(y)

我正在为一门课做作业,我不是在找人为我编写代码,但我的教授希望我们编写一个模板函数并使用他已经存在的代码来调用该函数。我遇到的问题是他的代码(发布在下面)调用这样的函数:add_one(x)(y)。他还坚持说他的代码没有错误,所以我真的不知道如何编写一个模板函数,让你可以这样调用它。谁能告诉我该怎么做?

我的教授代码。

0 投票
5 回答
101 浏览

c++ - 以模板函数为参数的 STL 算法

如何使用模板化函数STL提供的算法<algorithm>?例如,此代码无法编译,因为编译器无法推断predicate函数的模板参数:

0 投票
1 回答
2172 浏览

c++ - 如何选择正确的函数重载?

在以下情况下选择正确的函数重载的正确方法是什么?

0 投票
2 回答
132 浏览

c++ - C ++朋友模板功能 - minGW错误但不是VS2015

以下代码在 Visual Studio 2015 中编译没有问题,但使用 minGW 时会收到下面显示的警告和错误:

我远不是这方面的专家,所以我不确定问题是什么。似乎它告诉我它需要在类本身的朋友声明之前的以下代码,但是当我把它放在那里时,它会导致其他编译错误:

提前致谢!

在进行@Trevor Hickey 在他的帖子中建议的更改之后,关于朋友模板功能的警告消失了。但是,我仍然收到有关“元素”(在友元函数中)未在范围内声明的错误。

0 投票
1 回答
446 浏览

c++ - 使用 SFINAE、约束或概念限制专业化?

以下程序运行良好:

重要的是在编译时显式声明结构 B 和 C,并且只允许那些对应用程序有意义的特化。

但是从上面的代码中可以看出,我的下游开发人员(总有一天!)有可能创建语法上正确但语义上没有意义的模式。具体来说,应用程序只知道如何使用类和函数类型相同的类型。其余的都是无稽之谈。

这似乎是 SFINAE、约束或概念等新 C++17+ 功能之一的案例。尽管我正在阅读这些内容,但我还没有判断力做出选择。在 Alternatives 下的 cppreference 中,如果编译器有能力(我使用 VS2015),他们建议使用 Concepts 而不是 SFINAE。

将类型名 J 限制为与类型名 U 相同的好方法是什么?

0 投票
3 回答
1150 浏览

c++ - 将静态访问者与静态多态层次结构耦合

我的程序的目的是创建一个数据列表,在我的类层次结构中使用静态多态性时,我可以使用一组静态访问者访问该列表。

我通过 CRTP 创建了一个利用静态多态性的类层次结构:

我想将 DerivedBaseData 存储在一个包含中,以便以后迭代和访问。

我正在寻找一种将我的静态访问者与我的静态多态层次结构相结合的方法。我的静态多态性中需要一个 VirtualBaseData 类,它不是模板类,以便在容器中使用这些类。但是,由于我不能让 VirtualBaseData 类成为模板类,因此我无法像在 CRTPattern 中那样为派生类创建适当的 static_cast。

我的问题是:有没有人有一个好的策略可以保留我的静态多态设置以及静态访问者模式?

供参考:我已经按照http://hillside.net/plop/2006/Papers/Library/portableProgrammingPL.pdf第 21-23 页中的描述实现了我的静态访问者

0 投票
2 回答
1115 浏览

c++ - 可变参数模板:候选人期望 1 个参数,提供 0 个参数(推导错误)

看看这个代码片段

当我编译它说:

候选:模板无效打印(T)

候选人期望 1 个参数,提供 0 个参数

他是对的。事实上,我没有在参数包中提供任何参数。

但是,为什么这段代码会编译呢?

我要做的第一件事是将第一个 0 推入initializer_list<>

好的,现在让我们继续:编译器看到

它试图调用 print()……哦等等……参数包是空的,而 print() 函数有 1 个参数。

那为什么它评估为auto x = {0};

为什么编译器没有给我与以前完全相同的错误?