1

我被限制使用 C++17,我想通过传入类型标记将类型传递给 lambda,我可以在 C++20 和 C++17 中通过以下方式。

template<typename T>
struct Type
{
    using type = T;
};

auto lambda20 = []<typename T>(Type<T>){
    static_assert(std::is_same_v<T, int>);
};
auto lambda17 = [](auto tag){
    static_assert(std::is_same_v<typename decltype(tag)::type, int>);
};

void test()
{
    lambda20(Type<int>{});
    lambda17(Type<int>{});
}

是否有比 typename decltype(tag)::type 更短的语法可以用来从 C++ 17 中的类型标记中提取类型?

4

0 回答 0