gpt4 book ai didi

C++ 模板 - 浮点型和整型的不同特化

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

我正在尝试编写一个带有如下签名的函数:

template<typename From, typename To>
To bar(From in){...}

这个函数需要有不同的行为取决于 if To是 float 型还是积分型。 (假设From是整数且都是算术)

这可以使用 if constexpr(std::is_integral<To>::value) {...} else {...} 轻松实现,但是我仅限于没有 if constexpr 的 C++11 .

实现这种特化的好方法是什么?

最佳答案

您可以将模板重载与 SFINAE 一起使用.例如

template<typename To, typename From>
typename std::enable_if<std::is_integral<To>::value, To>::type bar(From in) {
...
}

template<typename To, typename From>
typename std::enable_if<std::is_floating_point<To>::value, To>::type bar(From in) {
...
}

顺便说一句,我建议更改模板参数的声明顺序 FromTo ,那么您可以在调用它们时明确指定第一个模板参数。如bar<int>(...);bar<float>(...); .

LIVE

如果您想获得除整型和浮点类型之外的更清晰的消息,您可以添加另一个重载。例如

template<class T> struct dependent_false : std::false_type {};

template<typename To, typename From>
typename std::enable_if<!std::is_integral<To>::value && !std::is_floating_point<To>::value, To>::type bar(From in) {
static_assert(dependent_false<To>::value, "Types must be integral or floating point types.");
}

关于C++ 模板 - 浮点型和整型的不同特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196026/

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