我这个代码,它似乎工作:
template <typename C>
class class_ {
protected:
std::map<std::string, native_function> methods;
public:
template <typename F, F fn>
class_ &method(const std::string &name) {
methods[name] = method_helper<C, F>::template toNative<fn>();
return *this;
}
};
这允许:
class_<MyClass>()
.method<decltype(&MyClass::numRows), &MyClass::numRows>("numRows");
但是,我还想允许将非成员函数作为方法添加到我的导出类中。问题是我需要一个不同的定义method
来使用正常的函数指针:
template <F, F fn>
class_ &method(const std::string &name) {
methods[name] = function_helper<F>::template toNative<fn>();
return *this;
}
但是,如上所示,模板参数将完全相同。
除了创建一个名称完全不同的函数之外,还有没有方便的方法来区分函数指针和成员函数指针?或者有没有办法在运行时确定要运行哪些代码?