Api MSVC C++;11:非标准构造函数继承 在我的Windows原生C++库中,有时我在构造函数方面做得太过了,而没有提供具有相同功能的实际方法(5-10个额外的构造函数)。这使得基本上扩展C++类非常困难,因为没有适当的构造函数继承(不重新声明它们和转发调用)。
我使用MSVC。(是的,你想笑就笑!)问题是:除了使用Api MSVC C++;11:非标准构造函数继承 在我的Windows原生C++库中,有时我在构造函数方面做得太过了,而没有提供具有相同功能的实际方法(5-10个额外的构造函数)。这使得基本上扩展C++类非常困难,因为没有适当的构造函数继承(不重新声明它们和转发调用)。,api,visual-c++,c++11,coding-style,Api,Visual C++,C++11,Coding Style,我使用MSVC。(是的,你想笑就笑!)问题是:除了使用和的默认构造函数/复制构造函数外,有没有其他方法可以继承构造函数?因为,如果有人决定扩展一个我滥用构造函数的类(不添加新属性和单一继承),那将是一场噩梦 (示例代码) 类父类{ 公众: 父项(){ std::cout委派/继承董事: parent(const std::nullptr_t&):parent() { /* ... */ 这是一个委托器[class.base.init]/6,而 using parent::parent;
和的默认构造函数/复制构造函数外,有没有其他方法可以继承构造函数?因为,如果有人决定扩展一个我滥用构造函数的类(不添加新属性和单一继承),那将是一场噩梦
(示例代码)
类父类{
公众:
父项(){
std::cout委派/继承董事:
parent(const std::nullptr_t&):parent() { /* ... */
这是一个委托器[class.base.init]/6,而
using parent::parent;
根据C++11标准[class.inhctor]从父级继承构造函数(除复制/移动构造函数外的所有构造函数)
问题是:除了使用默认的复制构造函数外,是否有方法继承构造函数
是的,对于C++11.MSVC还不支持这一点,并且根据,VS2013将支持委托构造函数(但没有提到继承构造函数)
我还想知道,对于C++11,为什么他们没有发现当我扩展单个类而不添加新属性时,它应该继承父类的默认行为
没有假设。您的派生类可能需要以不同的方式初始化。继承构造函数只需一行即可解决此问题
像第三版这样的东西有可能实现吗
我知道这个问题,但我没有掌握最新的草案和建议,无法回答C++1y的问题。对于C++11,这是不可能的-您可以使用宏使其更短(但不一定更好):
#定义为空
#定义DEF_MYCLASS_MEM(RET)模板RET MYCLASS::
#定义MYCLASS\u类型类型名称MYCLASS
DEF_MYCLASS_MEM(空)MYCLASS(){}
DEF_MYCLASS_MEM(MYCLASS_TYPE::tString)Method1(const tString&aParam)const{
返回aParam;
}
委派/继承股东:
parent(const std::nullptr_t&):parent() { /* ... */
这是一个委托器[class.base.init]/6,而
using parent::parent;
根据C++11标准[class.inhctor]从父级继承构造函数(除复制/移动构造函数外的所有构造函数)
问题是:除了使用默认的复制构造函数外,是否有方法继承构造函数
是的,对于C++11.MSVC还不支持这一点,并且根据,VS2013将支持委托构造函数(但没有提到继承构造函数)
我还想知道,对于C++11,为什么他们没有发现当我扩展单个类而不添加新属性时,它应该继承父类的默认行为
没有假设。您的派生类可能需要以不同的方式初始化。继承构造函数只需一行即可解决此问题
像第三版这样的东西有可能实现吗
我知道这个问题,但我没有掌握最新的草案和建议,无法回答C++1y的问题。对于C++11,这是不可能的-您可以使用宏使其更短(但不一定更好):
#定义为空
#定义DEF_MYCLASS_MEM(RET)模板RET MYCLASS::
#定义MYCLASS\u类型类型名称MYCLASS
DEF_MYCLASS_MEM(空)MYCLASS(){}
DEF_MYCLASS_MEM(MYCLASS_TYPE::tString)Method1(const tString&aParam)const{
返回aParam;
}
根据的VS2013路线图,继承构造函数在不久的将来不会出现在VC++中:
它们是“计划中的”。根据VS2013路线图,继承构造函数在不久的将来不会出现在VC++中:
它们是“有计划的”“太长了,读不下去了。”我已经找到了所有简短和简单的问题的答案……没有一个字留下来。也许有人会读……没有压力。我觉得这里有一些独立的问题,也许你可以把它们分开。“Dyp……不知道怎么,他们一起工作。有JUS。T 2个问题。一个关于非标准的构造函数继承和模板类方法内联。我把它们放在一起,这样我就不会被一些版主驳回的问题,TL;Dr.…但是看到标题并认为它是一个DUPE。“把模板化的函数嵌入到内联文件中肯定是一个正式的地狱。”您是否尝试过重构工具?为什么还要将定义与声明分开?可读性?(注意:Java..)“太长了,读不下去了?”我已经找到了所有简短和简单的问题的答案……没有一个字留下来。也许有人会读……没有压力。我觉得这里有一些独立的问题,也许你可以把它们分开?“迪普……不知道怎么,他们一起工作。只有2个。问题。一个关于非标准的构造函数继承和模板类方法内联。我把它们放在一起,这样我就不会被一些版主驳回的问题,TL;博士。但是看到标题并认为它是一个DUPE。“把模板化的函数嵌入到内联文件中肯定是一个正式的地狱。”您是否尝试过重构工具?为什么还要将定义与声明分开?可读性?(注意:Java..)PS:VS2012已经支持CTP2012中的链式构造函数。PS:VS2012已经支持CTP2012中的链式构造函数。(facepalm)我看到大量的构造函数
继承工作计划在我的未来!:)需要重新考虑我的策略并创建构造函数方法。这可以是静态的
并生成可移动的对象实例,也可以是对象的实际的方法
,至少它们带来了自动lambda参数这是2013年11月CTP中详细介绍的内容(facepalm)。我看到大量的构造函数继承工作计划用于我的未来!:)需要