声明为const的函数的c ++ 20概念检查

法尔科

我想测试c ++ 20中的新概念功能,我想知道是否可以创建一个概念来检查声明为const的函数是否存在。
如果函数具有正确的类型但不是const,我希望检查失败。我在这里找不到任何相关内容:https : //en.cppreference.com/w/cpp/concepts

我有这个

template <typename T>
concept hasToString = requires (T val) {
    { val.toString() } /* const here gives error */ -> std::same_as<std::string>;
};

void f(hasToString auto bar)
{
    std::cout << bar.toString();
}
巴里

您可以设置参数const

template <typename T>
concept hasToString = requires (T const val) {
    { val.toString() } -> std::same_as<std::string>;
};

概念检查使用模式,因此,如果要检查的是在const对象上调用成员函数,则需要构造该方案。


请注意,这取决于您T碰巧是引用类型时要发生的情况。如果您想这样做:

void f(hasToString auto&& bar)

然后T可能是引用类型,并且如果您仍然希望确实如此const,则需要将类似的类型T&变成T const写的长途是:

template <typename T>
concept hasToString = requires (std::remove_reference_t<T> const val) {
    { val.toString() } -> std::same_as<std::string>;
};

但是,如果您这样做足够多次,则可以考虑添加一个别名模板来处理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章