是否可以在C ++ 17中将lambda作为模板参数传递?

我已经阅读了关于lambdas传递给类模板的SO的多个答案,但是由于某些原因我无法实现...我正在使用g ++版本9和C ++ 17。

targetSdkVersion

该错误消息告诉我模板中不能包含lambda

littleangelfish 回答:是否可以在C ++ 17中将lambda作为模板参数传递?

是的,但是首先需要在template参数之外声明,并且lambda必须是不可捕获的:

auto lambda = [](Type t) {
    return t.theVal();
};

// Works,C++17 allows constexpr conversion for nttp
MyClass<int,Type,lambda> instance;

在C ++ 20中,可以在模板参数中直接使用C ++ 17的auto模板参数和lambda:

constexpr auto noop = [](auto&& v) -> decltype(auto) {
    return static_cast<decltype(v)&&>(v);
};

template<typename Key,typename Value,auto KeyFunc = noop>
class MyClass {
    // ...
};

MyClass<
    int,[](Type t) {
        return t.theVal();
    }
> instance;

C++20 Live example

C++17 Live example

本文链接:https://www.f2er.com/3157081.html

大家都在问