gpt4 book ai didi

c++ - 在接口(interface)文件中使用模板时函数指针出现 "not a type"错误

转载 作者:行者123 更新时间:2023-12-02 15:31:27 26 4
gpt4 key购买 nike

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

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

B:定义为全局

// A:
template<typename T>
using fcnPtr1 = void (T::*)(const int&);

// B:
typedef void(*fcnPtr2)(const int&);

class TestInterface
{
public:
// A: This cause error 'fcnPtr1' is not a type
virtual void setCallback(fcnPtr1 callback) = 0;

// B: This is OK
virtual void setCallback(fcnPtr2 callback) = 0;
};

到目前为止,方法 A 给出了“fcnPtr1”不是类型的错误,但方法 B 没问题。

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

最佳答案

在您的代码中,fcnPtr1 是一个模板。由于它是一个模板,您需要提供模板类型才能实际实例化它。这基本上会撤销你刚刚所做的事情,所以它没有帮助

如果您需要采用任意函数,但只想控制签名,那么您可以使用 std::function。通过使用 std::function 参数,您可以获取具有匹配函数签名的任何类型的可调用对象。这会将你的代码变成

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

关于c++ - 在接口(interface)文件中使用模板时函数指针出现 "not a type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58063985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com