Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing anonymous classes to private member functions

Tags:

c++

Is it possible to use a class defined in an anonymous namespace as a parameter in a private member function? I haven’t found a way to forward declare AnonymousHelperClass in the header.

// C.h
class C
{
  // ...
private:
  void Boing(AnonymousHelperClass &helper);
};

.

// C.cpp
namespace
{
  class AnonymousHelperClass
  {
    // . . . 
  };
}

C::Boing(AnonymousHelperClass &helper)
{
  // ...
}
like image 525
bare naked pointer Avatar asked Dec 02 '25 16:12

bare naked pointer


1 Answers

No, because there is no way to name the type in the header file.

However, you could turn the private member function into a template:

// C.h
class C
{
public:

    void Foo();

private:
    template <typename TAnonymousHelper>
    void Boing(TAnonymousHelper&);
};

Then define it in the source file and use it with the AnonymousHelperClass:

// C.cpp
#include "C.h"

namespace
{
    class AnonymousHelperClass { };
}

template <typename TAnonymousHelper>
void C::Boing(TAnonymousHelper& x) { }

void C::Foo()
{
    AnonymousHelperClass x;
    Boing(x);
}

Though really, it's probably easier just to rework your logic such that the private member function can be a namespace-scope function in the .cpp file.

like image 180
James McNellis Avatar answered Dec 05 '25 05:12

James McNellis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!