gpt4 book ai didi

c++ - 为什么不能将lambda用作非类型模板参数?

转载 作者:行者123 更新时间:2023-12-02 10:36:36 25 4
gpt4 key购买 nike

我想使用lambda作为模板参数,但是不会在c++ 17中编译。例如,此处的temp_bar<int, lambda1>不起作用。似乎非类型参数是limited。谁能解释为什么不允许这样做?实现这一点将使生活变得更加容易。

template<typename T>
bool to_bool(T o)
{
return bool(o);
}
template <typename T, auto F=to_bool<T>>
class temp_bar
{
public:
temp_bar(T o)
: _data{o}
{
if(F(o))
std::cout << "OK\n";
}
private:
T _data;
};

int main()
{
temp_bar<int> bar1{1};
auto lambda1 = [](int o){return o==2;};
temp_bar<int, lambda1> bar2{2};

return 0;
}

最佳答案

没有C++ 20,这将是不可能的。如果要在C++ 17中获得相似的结果,可以执行以下操作

template<typename T>
bool to_bool(T o)
{
return bool(o);
}
template <typename T >
class temp_bar
{
public:
template <typename F >
temp_bar(T o, F&& fn)
: _data{o}
{

if(fn(o))
std::cout << "OK\n";
}

temp_bar(T o) : _data(o) {
if (to_bool(o))
std::cout << "OK\n";
}




private:
T _data;


};

int main()
{
temp_bar<int> bar1{1};
auto lambda1 = [](int o){return o==2;};
temp_bar<int> bar2{2,lambda1};

return 0;
}

这实际上有两个构造函数,一个不带lambda,另一个带lambda。

关于c++ - 为什么不能将lambda用作非类型模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com