我正在使用传递函数指针的方法为我的库创建接口文件。有两种方法:
A:定义为模板类的成员函数
B:定义为全局
/**
* Product relation
*
* @var $query
*/
public function products(){
return $this->morphedByMany(Product::class, 'taggable')->withTimestamps();
}
到目前为止,方法A给我一个错误“ fcnPtr1”不是类型,但是方法B可以。
我需要使用方法A,因为不希望我的客户端在全局中定义回调函数。有什么建议吗?
答案 0 :(得分:3)
在您的代码中fcnPtr1
是一个模板。由于它是模板,因此需要提供模板类型以实际实例化它。这基本上会撤消您刚刚所做的操作,因此没有帮助
如果您需要仲裁功能,但只想控制签名,则可以使用std::function
。通过使用std::function
参数,您可以采用具有匹配函数签名的任何类型的可调用对象。那会把你的代码变成
class TestInterface
{
public:
virtual void setCallback(std::function<void(const int&)> callback) = 0;
};