Могу ли я использовать std::bind конструктор базового класса, чтобы производному не нужно было вызывать его явно?

У меня есть абстрактный базовый класс, которому нужны некоторые объекты, переданные его конструктору, для инициализации его членов. Но я хотел бы избавиться от передачи этих объектов через конструктор производного класса.

class Derived : public Base
{
public:
    Derived(type one, type two, type three) : Base(one, two, three)
    {
        // ...

Объекты, передаваемые базовым классам, являются одними и теми же экземплярами для всех созданных производных классов. Есть ли способ связать их с конструктором базового класса, чтобы мне не приходилось перенаправлять их через конструктор производного класса?

// do some magic
// ...

class Derived : public Base
{
    // no need for an explicit constructor anymore
    // ...

person danijar    schedule 18.08.2013    source источник
comment
Вы уверены, что std::bind имеет к этому какое-то отношение?   -  person jrok    schedule 18.08.2013
comment
std::bind позволяет привязывать значения к параметрам функции. Я ищу что-то подобное для конструкторов классов базовых классов.   -  person danijar    schedule 18.08.2013


Ответы (1)


В С++ 11 вы можете наследовать конструкторы базового класса. Кажется, это примерно сделает то, что вам нужно:

class derived
    : public base {
public:
    using base::base;
    // ...
};
person Dietmar Kühl    schedule 18.08.2013
comment
Не могли бы вы привести пример создания производного класса при передаче параметров базовому классу с использованием унаследованных конструкторов? - person danijar; 18.08.2013
comment
@danijar: я не думаю, что понимаю ваш запрос: вы бы создали производный объект, передав ему аргументы, которые принимает базовый класс. Если вы ссылаетесь на реализацию конструктора производных классов, вы вообще не будете его реализовывать! Если вам нужна пользовательская инициализация в производном классе, вы можете учесть ее при построении производного члена. - person Dietmar Kühl; 18.08.2013