具有条件的C 模板非类型参数

C++ template non-type parameter with condition

本文关键字:类型参数 有条件      更新时间:2023-10-16

我的非型模板,其功能指针定义为:

template<typename T>
using CallbackFn = T (*)(T);
template <CallbackFn<float> Fn>
static void run(float * data, size_t dataLen)
{
    float dataMax = Fn(data[0]);
    for (size_t i = 1; i < dataLen; i++)
    {
        dataMax = std::max(dataMax, Fn(data[i]));
    }
    printf("%fn", dataMax);
};
float * someData = new float[10];
run<std::sin>(someData, 10);
run<std::cos>(someData, 10);

可以做类似:

的事情
template <typename T, CallbackFn<std::is_same<T, int> ? float : double> Fn>
static void run(T * data, size_t dataLen)
{
    T dataMax = Fn(data[0]);
    for (size_t i = 1; i < dataLen; i++)
    {
        dataMax = std::max(dataMax, Fn(data[i]));
    }
    printf("%fn", dataMax);
};
int * someDataInt = new int[10];
run<int, std::sin>(someDataInt, 10);

这是int的愚蠢示例,但是我的Actuall代码更为复杂,我正在寻找是否有办法进行is_same条件。

您正在寻找

CallbackFn<std::conditional_t<std::is_same_v<T, int>, float, double>>