gpt4 book ai didi

c++ - 如何重新排序功能参数?

转载 作者:行者123 更新时间:2023-12-03 15:30:28 25 4
gpt4 key购买 nike

查看下面的伪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(???);
}
有两个带有参数的功能。参数的数量大于3,但为简单起见,例如,将其设置为3。 Afunc-它是模板函数,具有与 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::gettuplestd::tie中按类型获取值,以将参数捆绑到引用的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);
}
在这里尝试: https://godbolt.org/z/7Gdc5qozW

关于c++ - 如何重新排序功能参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66907162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com