模板参数值中的Lambda

时间:2012-01-27 00:01:48

标签: 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。

1 个答案:

答案 0 :(得分:4)

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

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

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