我有一个模板功能,我们称之为“客户”:如何使用不同数量的默认参数来包装函数以使其只有一个参数?
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