是否可以用概念替换以下引用限定符?
也就是说,而不是
struct S
{
void func() && {}
void func() & {}
};
有这样的东西
struct S
{
void func() requires rvalue_concept< decltype(*this) > {}
void func() requires lvalue_concept< decltype(*this) > {}
};
是否可以用概念代替引用限定符?
您可以使用c++23中引入的显式对象参数语法,它允许我们推断出
this
的类型。
这样,你就可以写:
template<typename T>
concept rvalue_concept = std::is_rvalue_reference_v<T&&>;
template<typename T>
concept lvalue_concept = !rvalue_concept<T>;
struct S
{
template<typename Self>
void func(this Self&& self) requires rvalue_concept<Self>
{
std::cout << "rvalue version called\n";
}
template<typename Self>
void func(this Self&& self) requires lvalue_concept<Self>
{
std::cout << "lvalue version called\n";
}
};