在接口文件中使用模板时,带有“非类型”错误的函数指针

时间:2019-09-23 13:50:10

标签: c++ templates function-pointers typedef

我正在使用传递函数指针的方法为我的库创建接口文件。有两种方法:

A:定义为模板类的成员函数

B:定义为全局

/**
     * Product relation
     *
     * @var $query
     */
    public function products(){
        return $this->morphedByMany(Product::class, 'taggable')->withTimestamps();
    }

到目前为止,方法A给我一个错误“ fcnPtr1”不是类型,但是方法B可以。

我需要使用方法A,因为不希望我的客户端在全局中定义回调函数。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

在您的代码中fcnPtr1是一个模板。由于它是模板,因此需要提供模板类型以实际实例化它。这基本上会撤消您刚刚所做的操作,因此没有帮助

如果您需要仲裁功能,但只想控制签名,则可以使用std::function。通过使用std::function参数,您可以采用具有匹配函数签名的任何类型的可调用对象。那会把你的代码变成

class TestInterface
{
public:
    virtual void setCallback(std::function<void(const int&)> callback) = 0;
};