如何继承构造函数,或者如何调用具有未知数量参数的构造函数?

时间:2012-04-19 02:30:12

标签: c++ inheritance parameters constructor

我正在尝试编写一个方便使用的构造函数,类似于printf,例如:

class ExcBase
{
    ExcBase(const char *fmt, ...)
    {
        // call things like vsprintf
    }
};

但是构造的继承在c ++中似乎不可用,所以我想写一个继承的类,如:

class ExcChild : public ExcBase
{
    ExcChild(const char *fmt, ...)
       : ExcBase(fmt, ...) // XXX: how to pass the trailing parameters to the constructor?
    {
    }
};

或者我必须为所有子类编写相同的构造函数,这太烦人了......

这个问题困扰了我很多,我无法找到解决这个问题的方法...... 任何信息都将是一个很大的帮助...

4 个答案:

答案 0 :(得分:1)

如果您不需要在不支持它的旧编译器上编译代码,则可以使用using子句继承构造函数(并且即将推出的VC ++ 11将被视为“旧”)。 。)

或许您可以将实际的构造工作放在类似函数的vprintf中,让构造函数调用它。

答案 1 :(得分:1)

不要尝试在构造函数中完成所有工作。将其分解为碎片 - 提供一个以您想要的方式构建字符串的函数,并将该字符串传递给构造函数。

std::string format_string(const char * fmt, ...);

class ExcBase
{
    ExcBase(const std::string & message);
};

答案 2 :(得分:0)

你可以使用C ++ 11元组对其进行模板化 - 但这是我唯一能想到的。

答案 3 :(得分:0)

如果将复杂的工作分离为带有va_list参数的函数,则应该能够从每个子构造函数(对于每个子类型仍然必须实现)中调用它。然后你的重复代码(每个类)只是声明va_list,然后调用va_start,你的新(基本)函数和va_end。关于这样做是a post here on SO