是否可以通过初始化列表初始化引用类型?
Is it possible to initialise a reference type through an initialisation list?
首先,如果这是一个糟糕的问题,我深表歉意。我是 C++ 新手。
我有一组 class headers 包含一个引用类型字段,它是一个接口(class 由纯虚函数构建)。我想初始化我的 class,以便默认情况下将引用类型字段设置为某个 "concrete" 派生的 class,这是使用默认构造函数(无参数!)完成的。我还希望能够用另一个 "concrete" 派生的 class.
覆盖这个初始化
到目前为止,我有 class headers 如下:
class Foo {
public:
Foo();
Foo(IBar & bar);
protected:
/* Update 1: const field */
const IBar & bar;
...
}
但我在实施方面遇到困难:
/* Is it possible to create the reference type through the initialisation list? */
/* Update 2: corrected initialisation of bar field from "BarDerivedA() bar" to "BarDerivedA()" */
Foo::Foo()
: bar(BarDerivedA())
{
}
/* Override */
Foo::Foo(IBar & bar)
: bar(bar)
{
}
更新
我们发现使用这种潜在的设计不会有效率。对于每个 class 字段,const IBar & bar
的默认值几乎总是相同的 object,单元测试除外 - 我们希望能够在模拟 [=34= 中进行交换] 根据需要。
我不想不断地在堆栈上创建相同的 object,所以我将在工厂中为这些 object 组工作。
我走的是单构造函数的路线如下:
Foo::Foo(IBar & bar)
: bar(bar)
{
}
如果有人想就 class 参考字段设置为初始化列表中的临时 object 提供适当的答案(即只能对 const 字段执行此操作,并且会退出构造函数之外的范围)我将其标记为已接受的答案。或者将其标记为适当的重复项。
您可以在 class 中添加默认对象,例如:
class Foo {
public:
Foo() : bar(defaultBar);{}
Foo(IBar& bar) : bar(bar) {}
protected:
const BarDerivedA defaultBar; // Before the reference.
const IBar& bar;
};
首先,如果这是一个糟糕的问题,我深表歉意。我是 C++ 新手。
我有一组 class headers 包含一个引用类型字段,它是一个接口(class 由纯虚函数构建)。我想初始化我的 class,以便默认情况下将引用类型字段设置为某个 "concrete" 派生的 class,这是使用默认构造函数(无参数!)完成的。我还希望能够用另一个 "concrete" 派生的 class.
覆盖这个初始化到目前为止,我有 class headers 如下:
class Foo {
public:
Foo();
Foo(IBar & bar);
protected:
/* Update 1: const field */
const IBar & bar;
...
}
但我在实施方面遇到困难:
/* Is it possible to create the reference type through the initialisation list? */
/* Update 2: corrected initialisation of bar field from "BarDerivedA() bar" to "BarDerivedA()" */
Foo::Foo()
: bar(BarDerivedA())
{
}
/* Override */
Foo::Foo(IBar & bar)
: bar(bar)
{
}
更新
我们发现使用这种潜在的设计不会有效率。对于每个 class 字段,const IBar & bar
的默认值几乎总是相同的 object,单元测试除外 - 我们希望能够在模拟 [=34= 中进行交换] 根据需要。
我不想不断地在堆栈上创建相同的 object,所以我将在工厂中为这些 object 组工作。
我走的是单构造函数的路线如下:
Foo::Foo(IBar & bar)
: bar(bar)
{
}
如果有人想就 class 参考字段设置为初始化列表中的临时 object 提供适当的答案(即只能对 const 字段执行此操作,并且会退出构造函数之外的范围)我将其标记为已接受的答案。或者将其标记为适当的重复项。
您可以在 class 中添加默认对象,例如:
class Foo {
public:
Foo() : bar(defaultBar);{}
Foo(IBar& bar) : bar(bar) {}
protected:
const BarDerivedA defaultBar; // Before the reference.
const IBar& bar;
};