c++ - 模板参数值中的 Lambda 表达式

标签 c++ templates lambda c++11

是否允许使用 lambda 函数作为模板参数的默认值?有问题的代码片段是:

template <typename K, typename E, typename C = [](const K& l, const K& r) { return (l < r); }>
class FooBar
{
    typedef C compare_fn;
};

如果不是,为什么会这样,除了指向函数的指针之外,最可行的替代方案是什么? TIA。

最佳答案

没有。 lambda 是一个对象,而不是类型。

解决此问题的一种方法是使用命名类,如下所示

template<typename K, typename E, typename C = std::less<K>>
class FooBar
{
    typedef C compare_fn;
};

关于c++ - 模板参数值中的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027316/

相关文章:

c++ - 类模板和仿函数

c++ - VS2015 C++ : unable to match function definition to an existing declaration

c++ - 使 C++ 成员函数根据模板参数更改不同成员变量的更优雅的方法?

python - 如何将 lambda 函数分解成它自己的函数? (Lambda 目前是 125+ 个字符)

c++ - lambda 函数/表达式是否支持 constexpr?

由 小码哥发布于 2019-11-17 20:00:06 c++d3dchromiumembedded

c++ - 运算符作为函数指针

c++ - 给定一个元素的地址搜索二维数组

c++用std::string读写结构数组到二进制文件

java - 在 Java 8 中使用 Lambda 遍历一个 Map of Maps?