Как избежать сквозных функций - PullRequest
0 голосов
/ 05 июня 2018

Класс, над которым я сейчас работаю, имеет член некоторого типа, который определяет различные функции.Мой класс должен быть оберткой вокруг этого типа по разным причинам (например, сделать его потокобезопасным).В любом случае, некоторые функции типа могут быть просто пропущены, например:

class MyClass {
  // ... some functions to work with member_

  /* Pass through clear() function of member_ */
  void clear() {
    member_.clear()
  }

private:
  WrappedType member_;
};

Это не так уж плохо, плюс я получаю гибкость, позволяя легко добавлять дополнительные функции в MyClass::clear() вна случай, если мне это нужно.Тем не менее, если у меня есть несколько из этих транзитных функций, они раздуваются MyClass и для меня затрудняет чтение.

Так что мне было интересно, есть ли хороший однострочный (кромезапись верхнего определения в одну строку) прохождения функций-членов WrappedType, очень похоже на обеспечение доступности членов базового класса :

/* Pass through clear() in an easier and cleaner way */
using clear = member_.clear; // Unfortunately, this obviously doesn't compile

1 Ответ

0 голосов
/ 05 июня 2018

Лично наследуйте от вашего базового класса и предоставьте подмножество интерфейса с ключевым словом using:

class MyClass : private WrappedType 
{
public:
    using WrappedType::clear; 
};
...