簡體   English   中英

如何重新排序 function 參數?

[英]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::gettuple中按類型獲取值,並使用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);
}

在這里試試: https://godbolt.org/z/7Gdc5qozW

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM