gpt4 book ai didi

c++ - 元编程 : Failure of Function Definition Defines a Separate Function

转载 作者:IT老高 更新时间:2023-10-28 12:52:42 25 4
gpt4 key购买 nike

this answer我根据类型的 is_arithmetic 属性定义了一个模板:

template<typename T> enable_if_t<is_arithmetic<T>::value, string> stringify(T t){
return to_string(t);
}
template<typename T> enable_if_t<!is_arithmetic<T>::value, string> stringify(T t){
return static_cast<ostringstream&>(ostringstream() << t).str();
}

dyp suggests而不是类型的 is_arithmetic 属性,是否为类型定义 to_string 是模板选择标准。这显然是可取的,但我不知道怎么说:

If std::to_string is not defined then use the ostringstream overload.

声明 to_string 标准很简单:

template<typename T> decltype(to_string(T{})) stringify(T t){
return to_string(t);
}

这与我不知道如何构建的标准相反。这显然是行不通的,但希望它传达了我正在尝试构建的内容:

template<typename T> enable_if_t<!decltype(to_string(T{})::value, string> (T t){
return static_cast<ostringstream&>(ostringstream() << t).str();
}

最佳答案

使用 Walter Brown's void_t :

template <typename...>
using void_t = void;

制作这样的类型特征很容易:

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T,
void_t<decltype(std::to_string(std::declval<T>()))>
>
: std::true_type { };

关于c++ - 元编程 : Failure of Function Definition Defines a Separate Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30189926/

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