gpt4 book ai didi

c++ - 使用 std::enable_if 的多变量模板特化

转载 作者:行者123 更新时间:2023-11-28 01:25:42 26 4
gpt4 key购买 nike

我试图用这些有效值简明地定义一个变量模板:

// (template<typename T> constexpr T EXP = std::numeric_limits<T>::max_exponent / 2;)

// float and double scalar definitions:
const double huge = std::scalbn(1, EXP<double>);
const float huge = std::scalbn(1, EXP<float>);
// SIMD vector definitions:
const Vec8f huge = Vec8f(huge<float>); // vector of 8 floats
const Vec8d huge = Vec8d(huge<double>); // vector of 8 doubles
const Vec4f huge = Vec4f(huge<float>); // vector of 4 floats
// Integral types should fail to compile

VecXX vector 定义(SIMD vector )需要使用相应的标量类型,如图所示(例如 huge<float> 表示 float s 的 vector )。这可用作 VecXX::value_type或通过类型特征样式模板类 ( VectorTraits<VecXX>::value_type )。

理想情况下,我想我会有类似的东西:

// Primary. What should go here? I want all other types to not compile
template<typename T, typename Enabler = void>
const T huge = T{ 0 };

// Scalar specialization for floating point types:
template<typename T>
const T huge<T> = std::enable_if_t<std::is_floating_point<T>::value, T>(std::scalbn(1, EXP<T>));

// Vector specialization, uses above declaration for corresponding FP type
template<typename T>
const T huge<T> = std::enable_if_t<VectorTraits<T>::is_vector, T>(huge<VectorTraits<T>::scalar_type>);

但我无法完全找出一个工作版本(以上失败并显示“const T huge<T> 的重新定义”)。执行此操作的最佳方法是什么?

最佳答案

不完全是你问的,但我希望下面的例子可以告诉你如何使用 SFINAE 来特化一个模板变量

template <typename T, typename = void>
constexpr T huge = T{0};

template <typename T>
constexpr T huge<T, std::enable_if_t<std::is_floating_point<T>{}>> = T{1};

template <typename T>
constexpr T huge<std::vector<T>> = T{2};

你可以检查一下

std::cout << huge<int> << std::endl;
std::cout << huge<long> << std::endl;
std::cout << huge<float> << std::endl;
std::cout << huge<double> << std::endl;
std::cout << huge<long double> << std::endl;
std::cout << huge<std::vector<int>> << std::endl;

关于c++ - 使用 std::enable_if 的多变量模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982348/

26 4 0
文章推荐: C++/Arduino 闪光 LED 不同间隔
文章推荐: html - Pinnacle 购物车网站直接显示 html css 代码并且不产生任何影响
文章推荐: javascript - D3 js图表倒置问题
文章推荐: javascript -