C++ C++;带条件的模板非类型参数
我有一个非类型模板,其函数指针定义为:C++ C++;带条件的模板非类型参数,c++,templates,c++17,C++,Templates,C++17,我有一个非类型模板,其函数指针定义为: 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++)
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);
模板
使用CallbackFn=T(*)(T);
模板
静态无效运行(浮动*数据,大小\u t数据长度)
{
float dataMax=Fn(数据[0]);
对于(大小i=1;i
可以执行以下操作:
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);
模板
静态无效运行(T*数据,大小\u T数据长度)
{
T dataMax=Fn(数据[0]);
对于(大小i=1;i
这是一个关于int
的愚蠢例子,但我的实际代码更复杂,我正在寻找一种方法来处理是否与您正在寻找的条件相同的问题。
CallbackFn<std::conditional_t<std::is_same_v<T, int>, float, double>>
CallbackFn