gpt4 book ai didi

带条件的 C++ 模板非类型参数

转载 作者:行者123 更新时间:2023-11-30 03:15:39 24 4
gpt4 key购买 nike

我有一个函数指针定义为的非类型模板:

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("%f\n", 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("%f\n", dataMax);
};

int * someDataInt = new int[10];
run<int, std::sin>(someDataInt, 10);

这是一个使用 int 的愚蠢示例,但我的实际代码更复杂,我正在寻找是否有办法执行 is_same 条件。

最佳答案

你在找

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

关于带条件的 C++ 模板非类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56869067/

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