我知道在pure C++中无法做到这一点,但我想知道是否可以从C ++ / CLI中的另一个构造函数的初始化列表中调用构造函数,就像在C#中可以这样做一样
示例:
ref class Foo {
Foo() {}
Foo(int i) : Foo() {}
}
答案 0 :(得分:14)
它被称为“委托构造函数”。目前还没有该语言版本。但是有一个正式的提案,你可以在language specification的附件F.3.1中找到它。考虑到微软对C ++ / CLI的立场,不太可能很快就能看到光明。
更新:委托构造函数确实超出了该附件中的提议,它们被添加到标准C ++ 11语言规范中。 Microsoft一直致力于实现C ++ 11的增加。委托构造函数最终成功用于VS2013。他们也在该版本的C ++ / CLI中工作。
答案 1 :(得分:1)
您可以执行以下操作
ref class A
{
public:
A(int p) : p(p) { this->A::A(); }
A() : p(1) {}
int p;
};
它不是有效的C ++代码,但VC编译得很好:)
答案 2 :(得分:0)
对于同样的问题,偶然发现了。就我而言,我正在使用VS2010。
很明显VS2010永远不会更新以完全实现C ++ 11,如果你需要更好地遵守标准(我尽我所能),请使用VS2015。但对于一些(遗留)项目,我仍然需要使用VS2010。
在许多情况下(对我来说)有效的方法是使用包含所有共享初始化代码的私有函数。例如:
{{1}}
它并没有解决所有“问题”,也没有阻止所有重复代码的情况,但它还有很长的路要走。
答案 3 :(得分:-5)
当你说 “我知道在纯C ++中无法做到这一点” 时你出错了。可以在本机C ++中执行此操作。您可以使用placement new运算符来执行此操作。
class A
{
public:
A(int p) : p(p)
{ new(this)A(); }
A() : p(1) {}
int p;
};