如何重载构造函数调用转发给C ++ / CLI另一个构造
-
23-09-2019 - |
题
我知道有没有办法在纯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;
};
不隶属于 StackOverflow