如何在 SFINAE 中使用模板结构的成员非模板函数的概念?
How to SFINAE using concepts on member non-template function of a template struct?
背景
我正在写一个对象池。我想提供一个构造函数,它只接受默认构造的元素计数。已经有一个 concept,我想尝试为此使用 C++20 功能。
代码
template <typename T, std::size_t capacity>
class object_pool {
/*
storage for uninitialized objects
used flags
size
etc...
*/
public:
??? object_pool(std::size_t count = capacity) {
/* initialization */
}
};
我可以用传统的方式进行 SFINAE,它看起来像:
template <typename = std::enable_if_t<std::is_default_constructible_v<T>>>
object_pool(std::size_t count = capacity) {
/*...*/
}
问题
概念可以用于SFINAE模板的成员函数class/struct吗?如果可以,怎么做?
你可以在签名后加上一个requires表达式
object_pool(std::size_t count = capacity) requires std::default_initializable<T> {
/*...*/
}
背景
我正在写一个对象池。我想提供一个构造函数,它只接受默认构造的元素计数。已经有一个 concept,我想尝试为此使用 C++20 功能。
代码
template <typename T, std::size_t capacity>
class object_pool {
/*
storage for uninitialized objects
used flags
size
etc...
*/
public:
??? object_pool(std::size_t count = capacity) {
/* initialization */
}
};
我可以用传统的方式进行 SFINAE,它看起来像:
template <typename = std::enable_if_t<std::is_default_constructible_v<T>>>
object_pool(std::size_t count = capacity) {
/*...*/
}
问题
概念可以用于SFINAE模板的成员函数class/struct吗?如果可以,怎么做?
你可以在签名后加上一个requires表达式
object_pool(std::size_t count = capacity) requires std::default_initializable<T> {
/*...*/
}