У меня довольно много пар свободных функций приведенной ниже формы из некоторой библиотеки C:
void dvecse(int, double, double *, int);
void svecse(int, float, float *, int);
Я хочу обернуть их в C ++ так, чтобы я мог вызвать одну функцию, например, vecse
и позвольте компилятору выяснить, какой из двух вызывать.
Я пытался добиться этого с помощью std::enable_if
, но я не думаю, что он предназначен для этого (семантика включения / выключения вместо выбора) ичто-то вроде ниже, очевидно, не компилируется из-за переопределения:
template <typename T>
std::enable_if<std::is_same<T, double>::value> vecse = dvecse;
template <typename T>
std::enable_if<std::is_same<T, float>::value> vecse = svecse;
Кроме того, я попытался std::conditional
, который, кажется, работает только с типами, а не со свободными функциями (альтернативой может быть конструкция с функторами,но я бы обернул все свободные функции в функциональные объекты).
Каким будет краткий способ выбора функции во время компиляции?