我有一個模板功能,我們稱之爲「客戶」:如何使用不同數量的默認參數來包裝函數以使其只有一個參數?
template<typename T>
void client(T (*func)(const std::string&), const std::string& s) {}
再就是,但一些「適配者」的功能,所有具有相同類型的第一個,非默認的論點,以下參數在數量上有所不同,並且具有默認值:
void adaptee_one(const std::string&, int i = 1, char* c = nullptr) {}
void adaptee_two(const std::string&, float* f = nullptr) {}
上述功能是給定的。現在我想要做的是將它們作爲第一個參數傳遞給上面的client<>()
函數,我只關心傳遞第一個參數const std::string&
。所以,我做到以下幾點:
void bindAdapteeOne(const std::string& s) {
return adaptee_one(s);
}
void bindAdapteeTwo(const std::string& s) {
return adaptee_two(s);
}
再經過bindAdapteeX()
到client<>()
。
我想要做的是自動包裝或有一個(模板)包裝,而不是每個適配器。我覺得這可能是variadics的情況,但幾乎沒有關於如何正確應用它們的想法。
C++ 11很好,如果絕對必要的話,C++ 14是很好的。
是否允許使用lambda? – AndyG
@AndyG它位於任何類之外的命名空間中,所以我認爲是的,只要有一個理智的地方來保存它們。 – iksemyonov
@rici因爲[不起作用](https://wandbox.org/permlink/WYzQfhLbPA7KXIEy)。 – Barry