我想要一个组合功能,它可以按任意顺序获取多个参数.例如:
int combine(int a, float b, char c)
{
return a+b+c;
}
Run Code Online (Sandbox Code Playgroud)
这只是我想要做一个例子,但我希望能够调用此函数的参数的任何命令:combine(1,2.5,'c')或combine('c', 1 2.5)或combine(2.5,1,'c')
因为每一种情况下创建一个功能是乏味尤其是当你有很多的争论,你想那些以任何顺序.这可能吗?
您可以使用功能模板:
template <typename T1, typename T2, typename T3>
int combine(T1 a, T2 b, T3 c)
{
return a+b+c;
}
Run Code Online (Sandbox Code Playgroud)
请注意,这将a是b,和c将成为加法表达式a+b+c有效的任何类型.
你可以制作combine()一个功能模板
template <typename T0, typename T1, typename T2>
int combine(T0 a0, T1 a1, T2 a2) {
return a0 + a1 + a2;
}
Run Code Online (Sandbox Code Playgroud)
如果要限制可以传递的类型,可以使用SFINAE添加约束.将参数限制为类型char,int和float,特别是如果应该允许标准转换,并不完全是微不足道的.我认为它看起来像这样:
#include <type_traits>
template <typename T>
struct is_allowed
: std::integral_constant<bool,
std::is_convertible<T, char>::value
|| std::is_convertible<T, int>::value
|| std::is_convertible<T, float>::value> {
};
template <typename T0, typename T1, typename T2>
typename std::enable_if<
is_allowed<T0>::value && is_allowed<T1>::value && is_allowed<T2>::value,
int>::type combine(T0 a0, T1 a1, T2 a2) {
return a0 + a1 + a2;
}
Run Code Online (Sandbox Code Playgroud)
如果您确实想要保留小数部分(如果存在),您可能需要查看std::common_type<T0, T1, T2>::type返回类型.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |