我有一个简单的类A
,提供可变参数函数模板。此函数使用内部的私有数据A
,但函数本身是公共的。课程如下:
class A {
public:
A() :
_bla("bla: ") {
}
template <class T>
void bar(const T& value) {
std::cout << _bla << value << std::endl;
}
template <class H, class... T>
void bar(const H& value, const T&... data) {
std::cout << _bla << value << std::endl;
bar(data...);
}
private:
const std::string _bla;
};
在一个名为foo.hpp的单独文件中,我有一个 function foo()
,它应该能够接收并使用该函数a.bar()
作为参数:
int main(int argc, char *argv[]) {
A a;
a.bar(1, "two", 3, 4);
foo(&a.bar);
}
我不太确定从哪里开始,但我尝试了以下方法 - 这不起作用。我怎样才能正确地做到这一点:
template <typename... T>
inline void foo(void (bar *)(const T&...)) {
unsigned int x(0), y(0), z(0);
bar(x, y, z);
}
额外的问题:有没有办法不仅可以调用:
foo(&a.bar);
但也调用绑定到一些参数,如foo
:a.bar
foo(&(a.bar(p1, p2));
我可以简单地将p1
和添加p2
到foo
定义本身,例如:
foo(p1, p2, &a.bar);
但如果我之前可以添加这些参数,这在语义上会更好。