C++ 基于参数类型为指针|引用重载函数的最佳方法?

C++ 基于参数类型为指针|引用重载函数的最佳方法?,c++,function,pointers,reference,C++,Function,Pointers,Reference,我有这样一个函数: void myFunction(MyObject& obj) { //lots of code to operate on obj } 我的问题是,有时候obj将是指向MyObject类型实例的指针 void myFunction(MyObject* obj) { //... } 我的问题是如何在不必重复任何代码的情况下实现两个函数定义?您只需从指针函数转发实例即可 void myFunction(MyObject* obj) { if (

我有这样一个函数:

void myFunction(MyObject& obj)
{
    //lots of code to operate on obj
}
我的问题是,有时候obj将是指向MyObject类型实例的指针

void myFunction(MyObject* obj)
{
    //...
}

我的问题是如何在不必重复任何代码的情况下实现两个函数定义?

您只需从指针函数转发实例即可

void myFunction(MyObject* obj)
{
    if (obj != nullptr) // do not want to dereference a null pointer
        myFunction(*obj);
}
将调用
myFunction
的参考版本,只允许您维护一个函数

void myFunction(MyObject* obj)
{
    if (obj != nullptr) // do not want to dereference a null pointer
        myFunction(*obj);
}

这假设您只需要处理对象的值,而使用指针或引用只是为了省去复制对象的麻烦。

您只需通过指针函数转发实例即可

void myFunction(MyObject* obj)
{
    if (obj != nullptr) // do not want to dereference a null pointer
        myFunction(*obj);
}
将调用
myFunction
的参考版本,只允许您维护一个函数

void myFunction(MyObject* obj)
{
    if (obj != nullptr) // do not want to dereference a null pointer
        myFunction(*obj);
}

这假设您只需要处理对象的值,而使用指针或引用只是为了避免复制对象。

我不确定。就我个人而言,我会满足于这样或那样。然后,如果需要,传入&rObject或*poobject。这对我来说很有效。你可以从一个函数调用另一个函数,但我认为你并不需要两个函数,调用方可以很容易地提供任何一个。我不确定。就我个人而言,我会满足于这样或那样。然后,如果需要,传入&rObject或*poobject。这对我来说很有效。你可以从一个函数调用另一个函数,但我认为你并不需要两个函数,调用者可以很容易地提供任何一个。酷。我不确定那会不会编译。但我的评论暗示了类似的东西。但你做得更好。我会先检查
nullptr
,然后再转发到
myFunction
@PaulMcKenzie Good suggestion的参考版本。我在代码中添加了一个检查。如果换一种方式,不是更容易吗?从引用函数到指针函数,由于引用永远不能为null,因此不需要检查…@LoPiTaL指针版本中仍然需要null检查,因为OP有值和指针,所以我认为这无关紧要。加上OP在参考版本中已经有了代码,所以我不想更改它。酷。我不确定那会不会编译。但我的评论暗示了类似的东西。但你做得更好。我会先检查
nullptr
,然后再转发到
myFunction
@PaulMcKenzie Good suggestion的参考版本。我在代码中添加了一个检查。如果换一种方式,不是更容易吗?从引用函数到指针函数,由于引用永远不能为null,因此不需要检查…@LoPiTaL指针版本中仍然需要null检查,因为OP有值和指针,所以我认为这无关紧要。加上OP在参考版本中已经有了代码,所以我不想更改它。