如何 select 使用 std::conditional 的免费功能
How to select a free function with std::conditional
我有很多来自某些 C 库的以下形式的自由函数对:
void dvecse(int, double, double *, int);
void svecse(int, float, float *, int);
我想用 C++ 包装它们,这样我就可以调用一个函数,例如vecse
,让编译器找出调用两者中的哪一个。
我试图用 std::enable_if
来实现这一点,但我不认为它是为了那个(on/off 语义而不是选择)并且像下面这样的东西显然因为重新声明而无法编译:
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
,它似乎只适用于类型而不适用于自由函数(带有仿函数的设计是一种替代方案,但我会将所有自由函数包装在函数对象中) .
在编译时实现函数选择的简洁方法是什么?
当重载时不需要模板:
void vecse(int a, double b, double* c, int d) { dvesce(a,b,c,d); }
void vecse(int a, float b, float* c, int d) { svecse(a,b,c,d); }
PS:我建议您使用有意义的名称。我不得不三重检查拼写错误。
PPS: 当你需要为每种类型做不同的事情时(这里:调用各自的方法),你通常不会从使用模板中得到太多。
我有很多来自某些 C 库的以下形式的自由函数对:
void dvecse(int, double, double *, int);
void svecse(int, float, float *, int);
我想用 C++ 包装它们,这样我就可以调用一个函数,例如vecse
,让编译器找出调用两者中的哪一个。
我试图用 std::enable_if
来实现这一点,但我不认为它是为了那个(on/off 语义而不是选择)并且像下面这样的东西显然因为重新声明而无法编译:
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
,它似乎只适用于类型而不适用于自由函数(带有仿函数的设计是一种替代方案,但我会将所有自由函数包装在函数对象中) .
在编译时实现函数选择的简洁方法是什么?
当重载时不需要模板:
void vecse(int a, double b, double* c, int d) { dvesce(a,b,c,d); }
void vecse(int a, float b, float* c, int d) { svecse(a,b,c,d); }
PS:我建议您使用有意义的名称。我不得不三重检查拼写错误。
PPS: 当你需要为每种类型做不同的事情时(这里:调用各自的方法),你通常不会从使用模板中得到太多。