Mixin C++
От: _nn_ www.nemerleweb.com
Дата: 22.09.09 20:04
Оценка:
Имеется следующая иерархия:

struct a
{
 a(int x)

 void f(int x)
 {
  if(x>0) g(x);
  else h(x);
 }

protected:
 virtual void g(int x) {}
 virtual void h(int x) {}
};

struct b : a
{
 b(int x) : a(x) {}

protected:
 virtual void g(int x) { do_something }
 virtual void h(int x) { do_something }
}


Мне нужно проверить что функции g, h вызываются.
Можно сделать просто наследование:

struct с : b
{
 c(int x) : a(x) {}

protected:
 virtual void g(int x) { b::g(x) }
 virtual void h(int x) { b::h(x) }
}


Но понадобилось для двух иерархий.
Поэтому решил сделать шаблон:
template<typename T>
struct add_check
{
protected:
 virtual void g(int x) { T::g(x) }
 virtual void h(int x) { T::h(x) }
}


Однако такое не сработает, если в классе b не будут определены оба метода.
Т.е.:
struct b2 : a
{
 b2(int x) : a(x) {}

protected:
 virtual void h(int x) { do_something }
};

struct b2_check : b2 , add_check<b2>
{
 b2_check(int x) : b2(x) {}
};
// Error: Cannot access protected method b::g


Все это нужно для теста.
Подскажите как сделать.

Спасибо.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.