问题标签 [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++ - 类模板的友元函数
我有一个类模板Foo<T>
。
我想实现一个非成员函数Bar
,它需要两个Foo
s 并返回一个Foo
. 我想Bar
成为非会员,因为调用者写Bar(f1, f2)
比f1.Bar(f2)
. 我也想Bar
成为,inline
因为计算是琐碎和频繁的。
诀窍是Bar
需要访问Foo
的私人数据。我不希望有私有数据的访问者——没有充分的理由向用户公开私有数据。所以想交Bar
个朋友Foo
。
这就是我遇到麻烦的地方。编译器抱怨:
当友元声明引用函数模板的特化时,不能使用 inline 说明符。
这个规则是由标准强加的还是特定于 MSVC++ 的?
这是我尝试过的:
创建
Bar
一个 const 公共成员函数,然后声明一个简单返回的非成员版本lhs.Bar(rhs)
。这似乎是最简单的解决方案。删除
inline
提示,知道编译器将决定内联而不管提示。这会违反单一定义规则吗?它仍然必须在头文件中定义,因为它是一个函数模板。使用虚拟模板类型声明成员函数:
/li>
我不完全确定为什么会这样,但它确实满足了编译器。
有更好的解决方案吗?
c++ - 返回类型为 T 的函数模板无法编译
以下代码编译良好:
在ideone编译成功:http: //ideone.com/dR6iZ
但是当我提到返回类型时,它不会编译:
现在它给出了错误:
prog.cpp:6: 错误:没有匹配函数调用'f(const char [21])'</p>
ideone 的代码:http: //ideone.com/b9aSb
即使我创建了返回类型const T
,它也不会编译。
我的问题是:
- 为什么它不编译?
- 返回类型与错误和函数模板实例化有什么关系?
c++ - 为什么 GCC 不允许我将模板参数用于另一个模板的参数?
我编写了以下模板函数来对 std::vector 对象的内容求和。它位于一个名为 sum.cpp 的文件中。
当我尝试编译这个函数时,G++ 吐出以下错误:
据我所知,返回此错误的原因是因为std::vector<T>::size_type
无法解析为类型。我在这里唯一的选择是回退std::size_t
(如果我理解正确,通常但并不总是与 相同std::vector<T>::size_type
),还是有解决方法?
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'
是错误信息。
对于如何克服此错误,我们非常感谢您提供任何帮助或提示!
templates - 模板函数中的“没有匹配的函数调用”
尝试编写模板函数时,我不断收到以下错误:
我搜索了错误并发现了其他一些情况,如果参数是浮点数或双精度数,非类型模板参数可能会出现问题。我使用非类型模板参数size_t
来确定矩阵和向量的大小。
我有以下课程:
矩阵:
向量:
我的功能:
调用自:
gcc 版本 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)
d - D 函数模板和类型推断
考虑以下代码:
现在,我希望编译器推断出consume
将被实例化为
但这似乎没有发生。错误如下:
我看到参数类型是正确的......我尝试了一些函数签名的变体,比如:
它也不能编译(想法是改变参数的顺序),和
它可以编译并推断类型。如果我在调用中明确指定类型,即
正如预期的那样,它还可以编译和调试writeln
打印。char
我是否遗漏了推理规则中的某些内容,或者我只是在编译器中遇到了错误?
哦是的:
c++ - 函数的 C++ 模板特化
我正在玩模板专业化,但我发现了一个我似乎无法解决的问题;这是我的代码:
所以我想要做的是传递模板中要处理的内容的长度。
问题是,这个编译,永远输出:
最后两行,与第一行几乎相同。
在我看来,它没有抓住专业化,因此:
我对么?
如果我是正确的,我猜这是函数模板不允许部分模板专业化的问题,那么解决方案是什么,制作一个结构,并在上面使用专业化?
c++ - 如何在 C++ 的模板函数中传递普通参数和模板参数?
我在名为 myNamespace 的命名空间中有一个模板函数(如下):
但是,每当我调用此函数时,我都会收到以下错误:
我已经尝试了所有组合,但没有运气,请帮助我!!!
c++ - 非类型函数模板参数
我正在阅读 C++ Templates Complete Guide 并遇到了这个非类型函数模板参数代码(我添加了 main() 和除函数定义和调用之外的其他部分):
从书中阅读后我不明白为什么我们需要对函数调用进行类型转换?
编辑:书中的解释:
add 是一个函数模板,函数模板被认为是命名一组重载函数(即使该集合只有一个成员)。但是,按照目前的标准,重载函数集不能用于模板参数推导。因此,您必须转换为函数模板参数的确切类型:...
编译器:Ubuntu 10.10 上的 g++ 4.5.1
c++ - 我可以将(增强)绑定与功能模板一起使用吗?
是否可以使用(boost) bind将参数绑定到函数模板?
想法?