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

c++ - 避免在编译时错误条件下调用函数

我希望能够避免在编译时知道条件为假时调用函数。现在我使用这样的东西:

我不喜欢这种方法的一点是,params即使函数体为空,也会对其进行评估。

我想要一个解决方案,当根本不调用函数并且当条件为假时不会评估参数(这可能在第一种情况下使用空函数进行优化,但我不能假设这对每个都是真的编译器)。

这甚至可能吗?

0 投票
1 回答
2136 浏览

c++ - 将模板函数作为函数指针传递

这个模板函数testFunc可以作为函数指针安全地传递给 C 函数吗?我不清楚 C++ 如何能够将正确的内存地址分配给函数指针。混淆是因为我无法编译将类成员函数作为函数指针参数传递的相同代码。

0 投票
1 回答
473 浏览

c++ - 具有通用返回类型的特化函数

我有一个我认为是关于使用通用返回类型专门化函数的简单问题。我找不到另一篇回答我的问题的帖子,但也许那个帖子存在,我只是不理解它(或者我还没有找到它)。所以,希望这不是重复,但它就是这样:
以下代码说明了我的问题:

A.cpp

用法:

您可能从代码中收集到的是,在double是模板参数的情况下,我想专门化通用func()函数。但是,运行时我看到:

通用的

通用的

代替:

通用的

双倍的

为什么两次都调用通用版本?我怎样才能得到我想要的行为?

我也会快速描述现实生活中的情况,以防我的问题的答案是“你可能永远不想这样做”。我只是想编写一个将命令行参数(字符串)解析为各种数据类型(int、double、bool 等)的类。一种明显的方法是为每种所需类型编写一个单独的函数。另一种方法是通过引用传递变量,而不是返回值,并为每种类型重载函数。

但是,我在想一个专门的函数会使代码更具可扩展性。我的目标是导致泛型案例发生错误,并显示一些错误消息,例如“我还没有为您的目标类型实现解析器”,而每个特殊案例都将实现适当的字符串到类型解析器. 我认为这将允许我为新类型添加解析器,而无需修改原始类文件,这与我相关,因为我正在将此参数解析器构建到库中。

好的,希望这是有道理的。我更感兴趣的是解释为什么代码没有达到我期望的效果而不是解决方案,但无论是哪一个都值得赞赏!

0 投票
1 回答
2607 浏览

c++ - 模板函数特化与重载

从一些关于模板专业化的幻灯片:

为什么第二种方式更“合适”?

0 投票
3 回答
1155 浏览

c++ - 函数模板的 C++ 循环依赖问题

我正在从事的项目中有几个课程;第一个是 Solver 类,最初带有一个函数模板,其完整定义在 Solver 头文件中,如下所示(仅显示基本必需品):

求解器.h

现在,类 A 用作求解函数模板的模板参数,如下所示:

A.cpp

所以这一切都很好,就像现在一样,但为了项目的目的,我需要将solver()函数模板的定义从头文件中移动到一个实现文件(solver.cpp)中。据我了解,只要我添加明确说明函数模板将使用哪些类型的行,我就可以做到这一点,如下所示:

求解器.cpp

但是,当我尝试编译求解器时,这不起作用,因为为了将 A 指定为我想在 solve.cpp 中用作模板参数的类型,我需要 A 不是不完整的类型。但是 A 需要 Solver 才能编译 - 所以我相信我有一个循环依赖。有什么办法可以解决这个问题吗?

我对这一切都比较陌生,所以请放轻松:) 非常感谢。

0 投票
4 回答
39055 浏览

c++ - 内联模板函数?

inline如果模板函数包含在多个cpp文件中,我是否需要它们?谢谢。

0 投票
2 回答
1273 浏览

c++ - 使用和重载基类的模板成员函数?

在下文中,结构Y重载X的成员函数f。两个重载都是模板函数,但采用不同的参数(typenameint),以明确指定:

1 0正如预期的那样,这使用 gcc 打印。然而,clang (3.3) 抱怨说

即,只能看到Y的版本。我试过了

相反,没有成功。非静态(模板)成员函数也是如此。那么这是一个错误吗?

0 投票
1 回答
510 浏览

c++ - 模板函数默认参数和类型推断

C++

这些模板函数都没有

允许任何具有以下零参数调用的编译:

foo尽管使用任何值调用都有效(例如foo(2))。

nullptr有一个特定的类型,即std::nullptr_t,所以我认为默认参数在#1 中不需要额外的类型限定。默认参数的类型在#2 和#3 中明确提供,所以我认为那里没有任何类型歧义。

这里有什么问题?是否有适当的方法来使用模板函数执行默认参数?

0 投票
2 回答
206 浏览

c++ - 模板函数调用其他函数

我知道template functions通常要在头文件中声明和定义。

我遇到的问题是我template function调用了其他函数。这些其他函数的原型位于模板函数本身之前的同一个头文件中。

那部分代码:

该函数RestoreThreadState是从此模板函数调用的几个函数中的第一个。其他的在 for 循环中被调用。

我不确定这个模板函数是否应该在头文件中。如果应该在头文件中,我该如何调用其他函数?

我在 MCMLKernel 实例化期间从编译器得到的错误:

  • 错误:缺少显式类型(假定为“int”)
  • 错误:变量“RestoreThreadState”可能未初始化
  • 错误:“SimState *”类型的值不能用于初始化“int”类型的实体
  • 错误:预期一个“)”
  • 警告:声明与之前的“RestoreThreadState”不兼容

额外细节。所有这些函数都是 CUDA 内核函数。MCMLKernel是一个__global__内核,它调用的其余函数都是__device__内核。我正在使用 Nsight Eclipse 版和计算能力 1.3 GPU(四个 Tesla C1060 卡)。

0 投票
3 回答
94 浏览

c++ - 为什么没有模板函数比模板函数更二进制

看这个简单的程序

我在 linux 上用 gcc 4.6.4 -std=c++0x -O2 -g -Wall 编译它。和二进制文件 11`238 字节。

但是这段代码产生了 11`150 个字节:

我还用 clang 3.3 进行了测试,结果分别为 5684 字节和 5636 字节。

为什么没有模板版本功能产生更多的二进制代码?