1
void Foo::Bar(Baz& x)
{
z = &x;
}

Foo* foo;

foo -> Bar(nullptr);

我正在尝试仅使用 typedef 创建一个通用模板 Baz。由于 z 是私有的并且属于 Foo,因此我无法将 nullptr 分配给 z。

如果可能的话,我希望最好的方法是在不改变太多实现的情况下将 z 设置为 nullptr——除非这是一个糟糕的实现。

我在想也许

(Baz *) 0,或 *(void *)0 或 Nullable Class 。

4

4 回答 4

8

如果您确实想保留此方法:

void Foo::Bar(Baz& x)
{
  z = &x;
}

但仍然希望能够设置z为,您可以为该参数nullptr添加一个重载:Barnullptr

void Foo::Bar(std::nullptr_t nullp)
{
  z = nullp;
}
于 2014-03-11T09:35:27.360 回答
2

如果要Foo::Bar取nullptr,则需要将参数更改为指针类型:

void Foo::Bar(Baz* x)
{
   z = x;
}

Foo* foo = new Foo(); 

foo -> Bar(nullptr);

注意:您需要foo pointer在使用之前为其分配对象,否则行为是不确定的。

于 2014-03-11T09:24:14.443 回答
1

nullptr是一个指针,不是一个有效的引用:

int &v = nullptr;

gcc 抱怨:

bla.cpp:1:10: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘std::nullptr_t’
 int &v = nullptr;

所以你不能将它作为参考参数传递。如果您希望能够将其更改x为(可能是 const)指针:

void Foo::Bar(Baz* const x) {
   z = x;
}
于 2014-03-11T09:25:50.123 回答
0
void Foo::Bar(Baz* x)
{
z = x;
}

Foo* foo;
Baz* ptr = NULL;
foo -> Bar(ptr);
于 2014-03-11T09:32:55.677 回答