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

c++ - 类模板的友元函数

我有一个类模板Foo<T>

我想实现一个非成员函数Bar,它需要两个Foos 并返回一个Foo. 我想Bar成为非会员,因为调用者写Bar(f1, f2)f1.Bar(f2). 我也想Bar成为,inline因为计算是琐碎和频繁的。

诀窍是Bar需要访问Foo的私人数据。我不希望有私有数据的访问者——没有充分的理由向用户公开私有数据。所以想交Bar个朋友Foo

这就是我遇到麻烦的地方。编译器抱怨:

当友元声明引用函数模板的特化时,不能使用 inline 说明符。

这个规则是由标准强加的还是特定于 MSVC++ 的?

这是我尝试过的:

  • 创建Bar一个 const 公共成员函数,然后声明一个简单返回的非成员版本lhs.Bar(rhs)。这似乎是最简单的解决方案。

  • 删除inline提示,知道编译器将决定内联而不管提示。这会违反单一定义规则吗?它仍然必须在头文件中定义,因为它是一个函数模板。

  • 使用虚拟模板类型声明成员函数:

    /li>

我不完全确定为什么会这样,但它确实满足了编译器。

有更好的解决方案吗?

0 投票
2 回答
2880 浏览

c++ - 返回类型为 T 的函数模板无法编译

以下代码编译良好:

在ideone编译成功:http: //ideone.com/dR6iZ

但是当我提到返回类型时,它不会编译:

现在它给出了错误:

prog.cpp:6: 错误:没有匹配函数调用'f(const char [21])'</p>

ideone 的代码:http: //ideone.com/b9aSb

即使我创建了返回类型const T,它也不会编译

我的问题是:

  • 为什么它不编译?
  • 返回类型与错误和函数模板实例化有什么关系?
0 投票
2 回答
449 浏览

c++ - 为什么 GCC 不允许我将模板参数用于另一个模板的参数?

我编写了以下模板函数来对 std::vector 对象的内容求和。它位于一个名为 sum.cpp 的文件中。

当我尝试编译这个函数时,G++ 吐出以下错误:

据我所知,返回此错误的原因是因为std::vector<T>::size_type无法解析为类型。我在这里唯一的选择是回退std::size_t(如果我理解正确,通常但并不总是与 相同std::vector<T>::size_type),还是有解决方法?

0 投票
1 回答
900 浏览

c++ - 模棱两可的错误:模板 C++

我已经尝试了几乎所有可以想象的事情(当然除了正确的事情),但仍然不明白为什么我会得到一个模棱两可的错误。我相当肯定这真的很愚蠢,但我就是看不到它!我的编译器显示了插入操作符的警告,我知道它们都被调用了,但是有人告诉我坚持旧的virtual会帮助我(而且它没有......),反正还没有!

错误是调用时cout << endl << accType;

ProduceReport.cpp:16: error: ambiguous overload for 'operator<<' in 'std::cout. std::basic_ostream<_CharT, _Traits>::operator<< [with _CharT = char, _Traits = std::char_traits<char>](std::endl [with _CharT = char, _Traits = std::char_traits<char>]) << accType'

是错误信息。

对于如何克服此错误,我们非常感谢您提供任何帮助或提示!

0 投票
1 回答
1116 浏览

templates - 模板函数中的“没有匹配的函数调用”

尝试编写模板函数时,我不断收到以下错误:

我搜索了错误并发现了其他一些情况,如果参数是浮点数或双精度数,非类型模板参数可能会出现问题。我使用非类型模板参数size_t来确定矩阵和向量的大小。

我有以下课程:

矩阵:

向量:

我的功能:

调用自:

gcc 版本 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)

0 投票
1 回答
400 浏览

d - D 函数模板和类型推断

考虑以下代码:

现在,我希望编译器推断出consume将被实例化为

但这似乎没有发生。错误如下:

我看到参数类型是正确的......我尝试了一些函数签名的变体,比如:

它也不能编译(想法是改变参数的顺序),和

它可以编译并推断类型。如果我在调用中明确指定类型,即

正如预期的那样,它还可以编译和调试writeln打印。char我是否遗漏了推理规则中的某些内容,或者我只是在编译器中遇到了错误?

哦是的:

0 投票
4 回答
20374 浏览

c++ - 函数的 C++ 模板特化

我正在玩模板专业化,但我发现了一个我似乎无法解决的问题;这是我的代码:

所以我想要做的是传递模板中要处理的内容的长度。

问题是,这个编译,永远输出:

最后两行,与第一行几乎相同。

在我看来,它没有抓住专业化,因此:

我对么?

如果我是正确的,我猜这是函数模板不允许部分模板专业化的问题,那么解决方案是什么,制作一个结构,并在上面使用专业化?

0 投票
2 回答
267 浏览

c++ - 如何在 C++ 的模板函数中传递普通参数和模板参数?

我在名为 myNamespace 的命名空间中有一个模板函数(如下):

但是,每当我调用此函数时,我都会收到以下错误:

我已经尝试了所有组合,但没有运气,请帮助我!!!

0 投票
1 回答
3138 浏览

c++ - 非类型函数模板参数

我正在阅读 C++ Templates Complete Guide 并遇到了这个非类型函数模板参数代码(我添加了 main() 和除函数定义和调用之外的其他部分):

从书中阅读后我不明白为什么我们需要对函数调用进行类型转换?

编辑:书中的解释:

add 是一个函数模板,函数模板被认为是命名一组重载函数(即使该集合只有一个成员)。但是,按照目前的标准,重载函数集不能用于模板参数推导。因此,您必须转换为函数模板参数的确切类型:...

编译器:Ubuntu 10.10 上的 g++ 4.5.1

0 投票
2 回答
9213 浏览

c++ - 我可以将(增强)绑定与功能模板一起使用吗?

是否可以使用(boost) bind将参数绑定到函数模板

想法?