我构建了一个指向函数的接口。有时这个计算取决于状态,我希望将其封装在一个类中并传递其方法:
#include <iostream>
class Printer {
public:
static void print(int i) { // Want to get rid of the static
std::cout << i << "\n";
}
};
template<typename int_func>
void with_1(int_func func) {
func(1);
}
int main(int argc, char const *argv[]) {
Printer printer;
with_1(printer.print);
return 0;
}
我需要非静态方法(甚至更喜欢重载operator()
)。但是,删除静态会导致error: a pointer to a bound function may only be used to call the function
。
我可以使用这样的假人:
Printer printer;
void dummy(int i) {
printer.print(i);
}
int main(int argc, char const *argv[]) {
with_1(dummy);
return 0;
}
但这对我来说并不优雅。我可以编写一个接受函数指针和非静态方法的模板吗?或者我的问题是否有更好的设计模式?
答案 0 :(得分:1)
答案 1 :(得分:1)
试试这个:
int main(int argc, char const *argv[]) {
Printer printer;
with_1( std::bind( &Printer::print, printer, std::placeholders::_1 ) );
return 0;
}
(您需要#include <functional>
。)