Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;带条件的模板非类型参数_C++_Templates_C++17 - Fatal编程技术网

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