问题标签 [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.
c++ - 具有迭代器但类型固定的模板函数
我怎样才能强制这个函数只能用一个特定的、固定的迭代器值类型来调用,例如int
(但任何容器类型)?在这种情况下,ProcessIndex()
将 aint
作为输入,因此,非原始类型的编译失败并为 eg 生成警告float
。但是,我希望声明强制执行int
,以便编译失败,但int
.
尽管付出了很大的努力,但在这里或其他地方还没有找到“解决方案”,这是微不足道的(?)。
c++ - 如何为孩子中的函数指定模板参数?
所以我尝试:
但无法获得预期的效果 - 我想在类 data_child getData 函数中只返回boost::shared_ptr<std::vector<int>>
。怎么做这样的事情?
c++ - 模板参数默认为后面的
这个链接没有回答我的问题,所以我会在这里问:
基本上我想写一个模板函数
这里我总是需要Out
在调用时指定f
。我不想每次都这样做,所以我基本上想要
这意味着如果我不指定Out
,它将默认为In
。但是,这在 C++11 中是不可能的。
所以我的问题是,有什么办法可以达到效果:
- 调用
f(t)
将实例化f<T,T>(t)
或更一般地f<typename SomeThing<T>::type, T>
- 调用
f<U>(t)
将实例化f<U, T>(t)
c++ - 具有包扩展的可变参数函数模板不在最后一个参数中
我想知道为什么以下代码无法编译:
此代码无法使用 clang 和 GCC 4.8 编译。这是clang的错误:
在我看来,这应该可行,并且 T 应该被推断为长度为 1 的包。
如果标准禁止这样做,有谁知道为什么?
c++ - 函数模板特化和 Abrahams/Dimov 示例
(我假设了解此问题中的Abrahams/Dimov 示例。)
假设在这样的标头中有一些第 3 方代码,您无法修改:
问题是:
如果我已按原样获得上述声明,我现在是否可以T = int *
针对(例如)的情况专门化基本模板 1 ?
或者仅仅声明基本模板 2 是否意味着基本模板 1 不能再被专门化(至少对于指针而言)?
c++ - 成员函数模板参数默认值
以下代码在 GCC 4.5.3 中编译,但在 VS 2008 和 2010 中无法编译。这是由于 VS 编译器错误还是标准禁止提供默认函数模板参数值?
错误信息
c++ - 模板构造函数重载问题
我有一个带有三个构造函数的类模板,其中一个是函数模板。
从我的应用程序中,我需要区分引用类型/值、指针和数组并执行特定操作。因此,我决定必须使用不同的构造函数。
我正在尝试以下列方式调用构造函数:
问题是如果定义了带有指针的构造函数,则永远不会调用数组构造函数。但是,如果我将其注释掉,它会按应有的方式打印数组。
输出:
所以在语法上它是可能的,并且推断数组大小 N 是正确的。
显然,当存在数组构造函数时,我会混淆编译器。因此,我没有让编译器自动推断,而是尝试为数组构造函数指定模板参数,只发现与常规函数不同,模板参数不能具体指定。
我想在数组构造函数中引入一个虚拟参数来区分重载,但这似乎不太好。
有没有其他方法可以解决这个问题?任何线索表示赞赏。
c++ - C++中如何区分数据结构模板和函数模板?
我了解到可以通过以下方式使用模板创建数据结构:
这些函数还可以通过以下方式使用模板:
不同之处之一是在第一种情况下我们使用typename
,而在第二种情况下我们使用class
。
我发现包含以下内容的代码:
所以,我无法理解的是为什么我们将typename
(而不是class
)与函数结合使用。我们不应该使用class
吗?
c++ - 如何在模板参数列表中传递模板函数
假设我有一个template
功能:
我怎样才能将这整个传递template
给另一个template
?
如果produce_5_function
是函子,就没有问题:
但我希望能够使用原始函数模板来做到这一点:
我怀疑答案是“你不能这样做”。
c++ - 使用默认函数模板参数的意外重载解决方案
我遇到了一种看起来非常意外的重载解决行为。以下代码被 gcc 和 clang 拒绝并出现歧义错误:
错误是:
我希望两者都是完全匹配的,但第一个重载会在部分排序中获胜,因为在第一个参数A<T>
中比T
.
让我大吃一惊的是,如果我将第二个签名更改为:
gcc 和 clang 现在都接受代码,并按照我最初的预期选择第一个重载。
我看不出这种改变会如何改变行为:我所做的只是将既没有明确指定也没有推导的模板参数的使用替换为U
默认值(T
)。
再说一次,改变之前的行为是出乎意料的,所以也许我错过了一些东西。
有人可以解释一下:
- 为什么第一种情况不明确;和
- 为什么我所做的更改解决了歧义?
如果相关,我测试的编译器版本是 gcc 4.8.0 和最近的 clang 主干版本。