10

所以我有一个概念Fooable

template <typename T>
concept bool Fooable()
{
    return requires(...){ ... };
}

而且我有一个Bar将类型T作为模板参数的类模板,并且我只想在以下情况下启用成员T函数Fooable

template <typename T>
class Bar
{
public:
    template // ???
        requires Fooable<T>
    void MemFun();
};

是否可以在 C++17 中使用概念 TS 或在 C++2a 中?

4

2 回答 2

12

在 Concepts TS 和 C++20 设计中,函数都有一个可选的尾随requires-clause。所以你不需要让你的成员函数成为一个模板来约束它:

void MemFun() requires Fooable<T>;
于 2018-07-19T22:53:32.833 回答
4

约束可以在尾随位置的函数之后:

template <typename T>
class Bar
{
public:
    void MemFun() requires Fooable<T>;
};

住在神螺栓上

于 2018-07-19T22:54:02.377 回答