在我的 Windows Native C++ 库中,我有时在构造函数方面做得过火,而没有提供具有相同功能的实际方法(5-10 个额外的构造函数)。这使得基本扩展 C++ 类变得非常困难,因为没有适当的构造函数继承(无需重新声明它们并转发调用)。
我使用 MSVC。 (是的,你想笑就笑!) 问题是:除了默认构造函数/复制构造函数之外,有没有办法继承构造函数using
?因为,如果有人决定扩展一个我滥用构造函数的类(不添加新属性和单一继承),那将是一场噩梦。
(示例代码)
class parent {
public:
parent(){
std::cout << __FUNCTION__ << ':' << __LINE__ << std::endl;
}
// a non-standard constructor
parent(const std::nullptr_t&):parent(){
std::cout << __FUNCTION__ << ':' << __LINE__ << std::endl;
}
};
// adds nothing to parent but helper methods
// and maybe self-reliant properties with their own constructors
// so no constructor is required to initialize child class properties
class child: public parent {
public:
// using parent::parent; // of no real use
child(){
std::cout << __FUNCTION__ << ':' << __LINE__ << std::endl;
}
// need to forward call
child(const std::nullptr_t&):parent(nullptr){
std::cout << __FUNCTION__ << ':' << __LINE__ << std::endl;
}
};
这种多构造函数继承噩梦尤其发生在我构建我的基本 CRTP 类并且需要扩展它以构建我的默认类,然后允许其他人扩展和构建他们自己的变体同时保持可链接方法功能(父到子)的时候。
无论如何,在 MSVC中,using parent::parent
不继承parent(const std::nullptr_t&)
. 是不是应该按照C++11
标准?我应该期待这样的功能VC13
吗?这将极大地影响我对这次公开重写的风格选择。
我还想知道为什么,因为C++11
,他们没有弄清楚当我扩展单个类而不添加新属性时,它应该继承父级的默认行为(构造函数、赋值运算符等)。这很有意义……编译器可以弄清楚。