我知道有没有办法在纯C ++ 来做到这一点,但我想知道是否有可能调用在C ++ / CLI的另一个构造函数的初始化列表构造,同样的方法可以做到这一点在C#。

示例:

ref class Foo {
  Foo() {}
  Foo(int i) : Foo() {}
}
有帮助吗?

解决方案

有被称为“委托构造函数”。这是不是在语言的产品尚未推出。但是,有一个正式的建议,你会发现它在的语言规范。鉴于微软的立场对C ++ / CLI,这是不太可能很快看到天随时随地的光。


更新:委托构造确实有生命超出该附件在该提案,将它们添加到标准C ++ 11语言规范。微软一直致力于获得C ++实现的11次加法。委派构造最终使其成为VS2013。并且它们还在C ++ / CLI工作在该版本。

其他提示

可以做以下

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

    int p;
};

这不是有效的C ++代码,但VC编译它罚款:)

只是偶然通过,同样的问题。在我的情况我使用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 */

}

它并不能解决所有的“问题”,并没有阻止重复的代码所有情况,但它走一段很长的路要走。

当你说 “我知道有没有办法在纯C ++做这个”你是错误的。这是可以做到的,在本地C ++。您可以使用放置新的运营商这样做。

class A 
{ 

public:

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

   A() : p(1) {}      

   int p; 
};
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top