У меня нетипичный шаблон с указателем функции, определенным как:
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
.