在运行时向对象添加函数集合

时间:2012-07-07 10:56:02

标签: c++ delegation

我喜欢做的是在我的代码中实现角色编程技术。我正在使用C ++。 C ++ 11很好。

我需要的是能够定义一组函数。这个集合不能有状态。

此集合的某些功能将被延期/委派。

e.g。 (仅限插图:)

class ACCOUNT {
  int balance = 100;
  void withdraw(int amount) { balance -= amount; }
}

ACCOUNT savings_account;

class SOURCEACCOUNT {
  void withdraw(int amount); // Deferred.
  void deposit_wages() { this->withdraw(10); }
  void change_pin() { this->deposit_wages(); }
}

SOURCEACCOUNT *s;
s = savings_account; 

// s is actually the savings_account obj,
// But i can call SOURCEACCOUNT methods.
s->withdraw(...);
s->deposit();
s->change_pin();

我不想将SOURCEACCOUNT包含为ACCOUNT的基类并进行转换,因为我想模拟运行时继承。 (ACCOUNT不知道SOURCEACCOUNT)

我愿意接受任何建议;我可以在SOURCEACCOUNT类中使用extern或类似的函数吗? C ++ 11联盟? C ++ 11呼叫转发?改变'this'指针?

三江源

1 个答案:

答案 0 :(得分:0)

听起来你想创建一个SOURCEACCOUNT(或其他各种类)来引用ACCOUNT,并将封闭类的一些方法委托给ACCOUNT

class SOURCEACCOUNT{
  ACCOUNT& account;
public:
  explicit SOURCEACCOUNT(ACCOUNT& a):account(a){}
  void withdraw(int amount){ account.withdraw(amount); }
  // other methods which can either call methods of this class
  // or delegate to account
};