小编ray*_*i97的帖子

传递lambda而不是函数指针时为什么不能推导出模板参数

我有一个冒泡排序函数,它接受一个数组,一个比较函数和一个布尔值,指示它是否应该对数组进行倒置排序.它是一个支持任何数据类型的模板函数,并将自动推导出数组大小.

指定比较函数时,如果我传递函数指针,编译器会自动推导出数组的数据类型,这很好.但是,如果我改为传递lambda,它将不会自动推断.我必须明确指定数据类型,或static_cast将lambda指定为fnCompare_t<double>.

这背后的原因是什么?因为根据这篇文章,只要lambda不捕获,它就可以像普通的函数指针一样使用,但似乎并非总是如此?在这种情况下怎么会有所不同?

#include <iostream>
using namespace std;

template <typename T>
using fnCompare_t = int(*)(T const &, T const &);

template <typename T, size_t count>
inline void BubbleSort(
    T(&array)[count],
    fnCompare_t<T> fnCompare,
    bool reverse)
{
    cout << "TODO: Implement BubbleSort" << endl;
}

double doubleArray[] = {
    22.3, 11.2, 33.21, 44.2, 91.2, 15.2, 77.1, 8.2
};

int CompareDouble(double const & a, double const & b)
{
    return a > b ? 1 : a == …
Run Code Online (Sandbox Code Playgroud)

c++ c++14

5
推荐指数
1
解决办法
700
查看次数

什么是C++中的`&|`?

在研究C++运算符重载时,我偶然发现了一个页面:

新的运算符,例如**,<>或&| 无法创建.

请问&|在C++中真的存在吗?如果是这样,它叫什么,它做了什么?

---更新---

对于将来想知道答案的人:句子意味着你不能创建"新"运算符,而不是newC++中的新运算符和运算符.它的意思是

语言中不存在的运算符,例如**,<>和&|,无法创建

c++ operator-keyword

-4
推荐指数
1
解决办法
134
查看次数

标签 统计

c++ ×2

c++14 ×1

operator-keyword ×1