[英]How to reorder function parameters?
看看下面的伪 C++ 代码:
typedef *** SomeType1;
typedef *** SomeType2;
typedef *** SomeType3;
void BFunc(SomeType1& st1, SomeType2& st2, SomeType3& st3)
{
/*some work*/;
}
template <typename T1, typename T2, typename T3>
void AFunc(T1& p1, T2& p2, T3& p3)
{
BFunc(???);
}
有两个带参数的函数。 参数计数大于三个,但为了简单起见,例如让它为三个。
Afunc
- 模板化的 function 具有与BFunc
BFunc
相同的类型。 但是(!) BFunc
的参数序列可以(或不能)不同。 例如:
BFunc(int, double, char)
AFunc<double, int, char>
AFunc<int, double, char>
AFunc<char, double, int>
AFunc<char, int, double>
...
那么如何在AFunc
中重新排序参数以使用正确的参数顺序调用BFunc
?
您可以使用std::get
从tuple
中按类型获取值,并使用std::tie
将 arguments 捆绑到引用tuple
中。
显然,这仅在您的参数类型是唯一的情况下才有效。
确保std::get
使用引用类型以避免不必要的复制。
#include <tuple>
// arbitrary argument types
struct SomeType1{};
struct SomeType2{};
struct SomeType3{};
void BFunc(SomeType1& st1, SomeType2& st2, SomeType3& st3)
{
/*some work*/;
}
template <typename T1, typename T2, typename T3>
void AFunc(T1& p1, T2& p2, T3& p3)
{
// Make a tuple of references to all the arguments
auto tuple = std::tie(p1, p2, p3);
// Find the right arguments in the tuple
BFunc(
std::get<SomeType1&>(tuple),
std::get<SomeType2&>(tuple),
std::get<SomeType3&>(tuple));
}
int main()
{
SomeType1 t1;
SomeType2 t2;
SomeType3 t3;
AFunc(t1,t2,t3);
AFunc(t1,t3,t2);
AFunc(t2,t1,t3);
AFunc(t2,t3,t1);
AFunc(t3,t1,t2);
AFunc(t3,t2,t1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.