问题标签 [function-templates]

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 回答
1675 浏览

c++ - 在依赖范围内调用静态函数模板

template<int I> void ft()假设我在结构模板中有一个静态函数模板template<bool B> S,并且我想ft从另一个函数模板调用template<bool B> void g(),将 bool 模板参数从gto传递给S

在 GCC 4.5.2 中编译它会给出关于该行的两个错误S<B>::ft<12>()

  1. ')' 标记之前的预期主表达式
  2. '<未解析的重载函数类型>'和'int'类型的无效操作数到二进制'operator<'

Comeau ( http://www.comeaucomputing.com/tryitout/ ),在严格的 C++03 模式下,也抱怨该行,指出"expected an expression",在右括号下方有一个插入符号。然而,这两个编译器都没有抱怨这条线S<B>::f(),Comeau 实际上可以在轻松模式下编译整个最小示例。

如果我删除g的模板,而是像这样实例化S的模板参数g

GCC 成功地编译了它,Comeau 在严格的 C++03 模式下也是如此。

从上面 GCC 的第二个错误来看,似乎对 的解释存在歧义S<B>::ft<12>,好像它认为我正在尝试测试是否S<B>::ft小于 12。我知道使用typename来解决在提及时出现的歧义依赖范围内的类型。当出现在依赖范围中的事物是函数而不是类型时,有谁知道如何解决歧义?

0 投票
2 回答
330 浏览

c++ - 模板成员转换运算符中的编译错误

我正在尝试在一个类中编写一个转换运算符函数模板并遇到一些我不完全理解的编译错误。

上面的代码导致以下错误

现在让我困惑的是编译器试图选择TestPtr<ABC>::TestPtr(TestPtr<ABC>)而不是TestPtr<ABC>::TestPtr(ABC *)在 return 语句中。但是,如果我先用预期的构造函数创建一个变量,然后返回它的值,它就可以正常工作。我还使 T* 构造函数显式但无济于事。

我用 g++ 和 clang++ 都试过了,结果相似。有人可以解释一下这里发生了什么吗?

0 投票
1 回答
102 浏览

c++ - 带有隐式参数的 C++ 函数模板实例化

我不明白为什么下面的代码编译得很好:

但是,如果我将Aand的顺序切换B如下,那么它将无法编译:

编辑:欢迎临时解释,但如果有人能指出具体的规范会更好。说。谢谢!

0 投票
1 回答
248 浏览

c++ - C++:函数模板问题

我在修改 c++ 函数时遇到问题,以便它适用于任何数据类型。任何和所有的帮助将不胜感激。下面是我的代码,我一直遇到一个错误。

pivotPoint = partition(set, start, end);对于函数内读取的行quicksort(),我收到此错误:

如果有人可以让我知道它的含义以及如何适应它,我将非常感激。

0 投票
2 回答
1376 浏览

c++ - C++:处理整数和字符串的函数模板

我正在做一个编程任务,制作一个可以处理整数和双精度的函数模板。我已经做到了,但为了好玩,我想让它也能够处理字符串。这是下面的功能。我将如何让它处理字符串?

提前致谢,

亚当

0 投票
1 回答
1292 浏览

c++ - 将简单值从 lua 文件获取到 C++ 的通用解决方案

我正在尝试使用 Lua 文件作为配置或 ini。我成功了,但我的解决方案让我很恼火。具体来说,get_doubleget_int函数get_string需要以可重用的方式完成。

我在创建没有参数的函数模板时遇到了问题。另外,我不确定如何概括lua_is...lua_to.... 我的想法是给我们的if(is_same<T,double>::value) return (double)lua_isnumber(L,-1);,但它没有奏效。

这是工作代码:

主.cc:

配置.lua:

它编译为g++ main.C -I/usr/include/lua5.1/ -llua5.1 ; ./a.out

0 投票
2 回答
681 浏览

c++ - 可以在 C++ 中调用缺少模板参数的模板函数吗?

这是一个面试问题,已经完成了。

哪一行有错误?

第 2 行有错误,因为模板参数与定义不匹配。第 5 行有错误,因为缺少模板参数。

但是,第 1 行不是错误,我不知道为什么,它不是也错过了模板参数吗?

谢谢 !

0 投票
4 回答
74 浏览

c++ - 将调用两个重载模板中的哪一个?

我仍在尝试找出模板。我已阅读有关专业化规则的信息,但不明白这里发生了什么。

我在templates.h中定义了以下内容:

现在,如果我包含这个并像这样在我的主目录中调用它

我明白了

现在的问题是,为什么第一个比第二个更具体?我觉得它至少应该是模棱两可的,根本不起作用。

0 投票
5 回答
88 浏览

c++ - 为什么内联模板专业化有帮助,我应该这样做吗?

模板特化的问题在于它们被视为普通函数,因为在任何地方都不再使用模板参数。

因此,如果将以下代码放在头文件中,它首先会起作用。

但是,如果标头包含在两个文件中,这将停止工作。在这种情况下,我得到的错误(使用 VS2010)是:

这可以通过使用许多其他问题中提到的inline关键字来解决。

现在这对我提出了两个问题:

  1. 有没有其他方法可以做到这一点?将专门的功能放在源文件中似乎不起作用。可能是因为我需要在标题中进行某种声明。
  2. 内联实际上是做什么的?不应该使用 inline 似乎是整个互联网的普遍经验法则,因为编译器“在任何情况下都可能以他喜欢的方式内联函数”。因此,如果编译器可能不会内联我声明为“内联”的函数,为什么会这样呢?
0 投票
1 回答
2294 浏览

c++ - 将模板 typedef 作为参数传递给函数模板

我正在尝试将模板 typedef 作为参数传递给函数模板。但是我收到以下错误:

TestTemplates.cpp:11: 错误: '&' 之前的预期 unqualified-id 令牌

TestTemplates.cpp:11: 错误: '&' 之前的预期 unqualified-id 令牌

TestTemplates.cpp:11:错误:“&”之前的预期初始化程序 令牌

TestTemplates.cpp:25: 错误: 'func' 未在此范围内声明

谁能指出如何解决这个错误。我看过一些帖子,但找不到解决方案。谢谢