2010-03-01 64 views

回答

14

它被称为 “委托构造函数”。目前尚未在语言中提供。但是有一个正式的提案,你可以在language specification的附录F.3.1中找到它。考虑到微软对C++/CLI的立场,这一点不太可能在短期内看到。


更新:委托构造函数确实超出了该附件中的建议,它们被添加到标准C++ 11语言规范中。微软一直致力于实现C++ 11的新增功能。委托构造函数最终为VS2013做好了准备。他们也在该版本的C++/CLI中工作。

1

你可以做以下

ref class A 
{ 
public: 
    A(int p) : p(p) { this->A::A(); } 
    A() : p(1) {} 

    int p; 
}; 

这是不合法的C++代码,但VC编译它精细:)

-5

当你说“我知道有没有办法做到这一点纯粹的C++“你错了。在原生C++中可以这样做。您可以使用展示位置新操作员来执行此操作。

class A 
{ 

public: 

    A(int p) : p(p) 
    { new(this)A(); } 

    A() : p(1) {}  

    int p; 
}; 
+1

错误。 http://www.parashift.com/c++-faq-lite/init-methods.html – user634175 2012-08-28 12:52:16

+0

这是错误的。 – Puppy 2013-05-27 15:39:33

0

只是偶然发现,对于同一个问题。在我的情况下,我使用VS2010。

显然,VS2010将永远不会得到更新,如果你需要用标准更好地遵守(这是我做的时候我可以)全面落实C++ 11,使用VS2015。但对于一些(遗留)项目,我仍然需要使用VS2010。

,在很多情况下工作(对我来说)的方法是在它的所有共享初始化代码,使用专用的功能。例如:

class A 
{ 
private: 
    void Inidialise() { /* common initialisation here */ } 

public: 
    A()  { Initialise(); /* specific initialisation for A() here */ } 
    A(bool a) { Initialise(); /* specific initialisation for A(bool) here */ } 
    A(int b) { Initialise(); /* specific initialisation for A(int) here */ } 

    /* etcetera */ 

} 

它并不能解决所有'问题',也不能阻止所有重复代码的情况,但是它有很长的路要走。