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
答案 0 :(得分:7)
如果你想保留这种方法:
void Foo::Bar(Baz& x)
{
z = &x;
}
但仍希望能够将z
设置为nullptr
,您可以为Bar
添加一个特别需要nullptr
参数的重载:
void Foo::Bar(std::nullptr_t nullp)
{
z = nullp;
}
答案 1 :(得分:2)
如果希望Foo::Bar
采用nullptr,则需要将参数更改为指针类型:
void Foo::Bar(Baz* x)
{
z = x;
}
Foo* foo = new Foo();
foo -> Bar(nullptr);
注意:在使用之前需要为foo pointer
分配对象,否则行为是未定义的。
答案 2 :(得分: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;
}
答案 3 :(得分:0)
void Foo::Bar(Baz* x)
{
z = x;
}
Foo* foo;
Baz* ptr = NULL;
foo -> Bar(ptr);