c++ - C++中的回调模板

标签 c++ templates

我正在设计一个类来接收 C++ 中的回调。到目前为止,这是我的代码:

template <class T, typename K = void, typename P = void> 
class Callback {
private:
  typedef K (T::*Callback)(P*);
  Callback c;
  T* ptr;
  P* data;
public:
  Callback(T* _thisPtr, Callback _funcPtr, P* pp) { ptr = _thisPtr;  c = _funcPtr; data = pp; };
  virtual void execute() { (ptr->*c)(data); };
};

此代码有效,但现在我想要更多的灵 active 。如您所见,这适用于使用至少一个 P* 类型参数定义的方法。我想要一个类来管理可变参数列表。这里的一个限制是我不能使用 C++11,因为我必须使用 gcc 4.4,有什么提示吗?

最佳答案

构建一个通用的、多态的、快速的、安全的、通用的函数包装器并不是一件容易的事。

因此,如果 C++11 std::function不可用,我会去 boost::function .

它只有标题,并且有很好的文档。此外,您可以轻松切换到 std::function

真的,它会节省您几天的调试时间。您可以在 SO 上看到大量与 “我的 Callback 类中存在错误,为什么?” 相关的问题(请参阅右侧的“相关”部分。 ..)

关于c++ - C++中的回调模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25280389/

相关文章:

c++ - 调用带有大括号括起来的初始化列表的类的构造函数

c++ - C++ 函数的效率

templates - EF4 : Get the linked column names from NavigationProperty of an EDMX

c++ - 调用模板函数的常规方式

c++ - 为什么成员函数不能用作模板参数?

c++ - 在 Visual C++ 的命令行上编译

c++ - 创建一组宏来定义一个名为 RETURN_STATUS 的类型和以下值 :

c++ - 如何在图形问题中应用并行编程?

c# - 如何为新的 C# 类/接口(interface)编辑 Visual Studio 模板?

c++ - 模板类中静态字段的初始化列表因 clang 而失败