问题标签 [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 回答
1657 浏览

c++ - 模板函数特化的单独声明和定义:成员函数和非成员函数的不同行为

我想声明函数模板的特化,但稍后在源文件中定义它。考虑下一个例子:

.hpp

.cpp

在 MSVC 2012(安装 CTP)中,两种变体都可以正常编译,但非成员变体(#1)会引发链接器错误(未解决的外部问题,等等)。这是正常行为吗?MSVC 特定的?编译器错误?固定在 CTP 中?

编辑
我只使用专门的版本。它们在标头中声明并在源中定义。此方法适用于成员,但不适用于独立功能。

编辑 2
嗯...我正在尝试在家中构建相同的快照(相同的 MSVC 安装,没有 CTP),并且链接没有问题。似乎是本地错误或损坏的安装。

0 投票
1 回答
108 浏览

c++ - 带有函数模板的 boost::function

为什么上面的代码不能编译?如果我创建像下面这样的专用版本,它可以正常工作。

请有人告诉我如何将 boost::function 与函数模板一起使用?

0 投票
2 回答
1275 浏览

c++ - 从函数返回具有值模板参数的类模板

假设我有一个简单的模板类:

我通常会比ConsecutiveMatcher<wchar_t, L'\\'>()提供一个可以根据参数类型推断模板参数类型的函数来简化实例化:

但是,在这种情况下,MakeConsMatcher(L'\\')将不起作用,因为该函数需要返回一个类,其模板不仅包含类型,还包含值。

如何从不仅具有类型模板参数而且还具有值模板参数的函数返回类模板?

0 投票
1 回答
835 浏览

c++ - 派生类型不调用函数模板特化

我有一个专门用于特定类型的函数模板。在某些情况下,我无法调用专用版本。为了显示

现在,如果我构造一个“Base”或“Derived”的实例并调用“FooInternal”,所有的工作都如我所料

这个的输出是

}

但是假设我在这两者之间有一个调用 FooInternal 的中间函数模板。在这种情况下,派生类型的模板解析似乎一路失败

这个程序的输出是

我不明白为什么——在第三次调用中,“Foo”不会像直接调用时那样调用 FooInternal 的专用版本。在这种情况下,编译器不应该理解它是从“Base”派生的吗?我在这里缺少什么规则?

如果这很重要,我正在使用 Microsoft Visual Studio 2012 Update 3。

-乔

0 投票
1 回答
2487 浏览

node.js - nodejs:没有返回值的函数模​​板

我按照node.js的指令来实现工厂包装的对象。
到目前为止它有效。但是我没有开始工作的是一个没有返回值的函数。
即:(链接中示例的扩展)
myObject.h

并且在myObject.cc

不起作用。为什么?

我收到以下错误:

我真的需要返回值吗?我的意思是我可以返回 null 并忽略它,这不是问题,但这不是一个很好的解决方案。

0 投票
2 回答
145 浏览

c++ - 计为一个单一参数的模板模板参数

在下面的代码中,类模板使用一个参数,但如果模板参数是模板,则函数模板使用两个。这在使用类型推导时没问题,但在使用显式模板实例化时很奇怪。

是否可以将模板模板参数写为一个参数?

这个问题链接到函数重载匹配模板模板

编辑:

我得出的结论是这个问题不是一个好问题,因为如果有一个参数语法,重载决议仍然会选择错误的函数。这让我感到惊讶,但这里是证明它的代码(与以前相同的代码,除了一个模板函数重载发生了变化):

EDIt2:在跳过显式模板规范的主要内容中添加了进一步的打印。

EDIT3:下面的代码是废话。正如@DyP 正确指出的那样,我犯了一个错误。我void F(R<R<T>>)在明确的情况下打电话而不是void F(R<T>).

0 投票
1 回答
691 浏览

c++ - 使用显式模板参数调用流运算符模板 oerload

即使在琐碎代码的上下文中,函数模板上的显式模板参数也一次又一次地让我感到惊讶。这样的代码应该被视为反模式吗?一些开发人员在其他 StackOverflow 线程中假设了这一点。

在以下代码中,编译器在代码位置 (1) 处报告错误,指出未找到合适的函数重载。如果编译器检测到歧义,我不会那么惊讶,但事实并非如此。有什么提示吗?我正在使用 gcc 4.6.2

编辑:我不是在寻找解决方案。cppreference 中记录了一个示例解决方案。我正在寻找解释。

0 投票
1 回答
523 浏览

c++ - 具有显式类型规范的函数模板

我试图理解下面的示例代码。我知道我们可以明确指定数据类型,但不确定“int, double”和“int, int”是什么意思。以及为什么我们用这种方式编写函数模板而不是 T Tripleit (T Val) { T temp = val * 3; }? 提前致谢。

顺便说一句,输出是:

显式整数;整数参数:15

显式整数;双参数:9

显式 int,双精度;双参数:9

显式整数,整数;双参数:9

0 投票
1 回答
1264 浏览

c++ - 如何使包装类将其构造函数参数转发给 std::vector 的构造函数?

我有一个wrapper类来包装std::vector<int>数据成员。我希望wrapper' 的构造函数将其参数转发给vector<int>' ctor。我尝试使用可变参数模板构造函数来实现这一点。由于std::vector<int> v{1, 2, 3}是由它的std::initializer_listctor 构造的,所以我想在我做的时候wrapper激活ctorvectorinitializer_list

wrapper mywrap{1, 2, 3}.

但我没有得到想要的结果:

输出显示:

wrapper wrap1{ 1 };来电explicit vector (size_type n);

wrapper wrap2{ 1, 2 };来电

vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());.

wrapper wrap3未指定时失败initializer_list<int>

在所有情况下,我都希望激活vector's ctor。initializer_list<int>如何解决这个问题?

0 投票
2 回答
84 浏览

c++ - 特化非模板类的成员函数模板

成员函数模板的以下特化是否bar有效?它在 gcc 4.5.3 和 VS .NET 2008 上编译。我很困惑,因为我隐约记得读过函数模板不能被专门化。