gpt4 book ai didi

c++ - 有或没有运算符 << 的 SFINAE 重载选择?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:11:05 26 4
gpt4 key购买 nike

考虑这两个函数:

template <class Type, 
class = typename std::enable_if</*HAS OPERATOR <<*/>::type>
void f(std::ostream& stream, const Type& value);

template <class Type,
class... DummyTypes,
class = typename std::enable_if<sizeof...(DummyTypes) == 0>::type>
void f(std::ostream& stream, const Type& value, DummyTypes...);

由于非可变重载优先于可变重载,我想检查类型是否有 operator<<std::ostream使用 std::enable_if在第一个版本中。

那么我应该写什么来代替 /*HAS OPERATOR <<*/

最佳答案

以下应该有效

template <class Type, 
class = decltype(std::declval<std::ostream&>() << std::declval<Type>())>
void f(std::ostream& stream, const Type& value)
{
stream << value;
}

(请注意,在这种情况下您不需要使用 std::enable_if)

关于c++ - 有或没有运算符 << 的 SFINAE 重载选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19211542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com