什么是在uml图中表示绑定的简洁方法?

时间:2013-05-09 10:19:46

标签: c++ boost uml boost-bind

我想使用UML图表代表以下代码:

#include <iostream>
#include <boost/bind.hpp>

using namespace std;

class A {
 public:
  void bar() {std::cout << "A::bar()" << std::endl;}
};

// FUNC should be callable with arguments (int, A*)
template <typename FUNC>
class B {
 public:
  B(FUNC func, int data) : func_(func), data_(data){}
  void operator()(A* ap){func_(data_, ap);}
  FUNC func_;
  int data_;
};

// object generator uses argument deduction to construct B
template <typename FUNC>
B<FUNC> makeB(FUNC func, int data) {
  return B<FUNC>(func, data);
}

struct F {
  static void apply(int a, int b, A* ap){
    std::cout << "a+b = " << a + b << std::endl;
    ap->bar();
  }
};

int main() {
  A* a = new A;
  auto b = makeB(boost::bind(F::apply, 10, _1, _2), 20);
  b(a);
}

这是我的first attempt。我认为还有一些改进空间:

  1. 我应该捕获F属性中Abind的指针还是代表他们?目前我正在展示两者。我认为F::apply属性的语法也是错误的。

  2. bind课程编写签名模板的最佳方法是什么?

  3. decltype的模板参数中使用B是否有更好的方法?目前它看起来有点笨拙。

  4. 目的是向可能不熟悉它的人传达bind的工作方式,并传达一些关于bind如何在内部工作的内容。该图应该尽可能简单,因此任何直观且没有误导性的黑客都可以,它不必完全符合UML标准。

    更新This version修复了bind内部函数指针的类型。

0 个答案:

没有答案