我想将一个范围存储为一个类中的一个字段,以便以后可以多次重复使用它。但是,与局部变量不同,我不能简单地将其类型指定为auto
. 另一方面,库创建的范围类型非常复杂。手动找出正确的类型将花费我不成比例的长时间+如果我选择更改获取范围的方式,将来将无法维护。
所以,我想,也许我可以decltype
用来帮助自己:
class MyClass {
public:
using MyRange = decltype(std::declval<std::vector<int*>>() | ranges::v3::view::filter([=](int* elem) { return true; }));
MyRange range;
}
(注意:我的实际std::declval
情况实际上更复杂,但我想让这个例子简短一些。)
但我收到一个错误:
a lambda cannot appear in an unevaluated context
所以,我的问题是:
- 如何避免使用 lambda 并开始
decltype
工作? - 或者也许有更好/更清洁的方法来获取范围类型以便将其声明为类中的字段?