鉴于新的 C++11 标准及其中引入的移动语义,是否可以为构造函数引用创建默认值?这里Default value to a parameter while passing by reference in C++据说不行,但也许新标准允许一些技巧。
基本上我想要的是使用默认对象进行正常使用,并传递一个模拟对象来记录主机对象在测试阶段所做的所有调用。应该是这样的
class A {
B& b;
public:
A(B & b = B()){} // This does not work
}
当测试我想要的是
BMock bMock;
A a(bMock);
bMock.getStatistics();
有什么想法吗?
最佳答案
这个怎么样:
class Foo
{
B default_B;
public:
std::reference_wrapper<B> b;
Foo() : b(std::ref(default_B)) { }
Foo(B & br) b(std::ref(br)) { }
};
这是一个可能更轻量级的替代想法,但以默认情况下的动态分配为代价:
#include <memory>
class Foo
{
std::unique_ptr<B> pB;
public:
std::reference_wrapper<B> b;
Foo() : pb(new B), b(std::ref(*pb)) { }
Foo(B & br) pb(), b(std::ref(br)) { }
};
关于c++ - 在新的 C++11 中可以创建可选引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8301667/