【发布时间】:2018-11-29 19:56:03
【问题描述】:
我想将一个范围作为一个字段存储在一个类中,以便以后可以多次重复使用它。但是,与局部变量不同,我不能简单地将其类型指定为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正常工作? - 或者也许有更好/更简洁的方法来获取范围类型,以便将其声明为类中的字段?
【问题讨论】: