Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

privablic logo

Access to private members and methods in C++

How to use it

Copy privablic.h into your project and #include "privablic.h".

Suppose you know the implementation of a class (or a struct) like that:

class Sheep {
  public:
    Sheep(string name) { this->name = name; };
  private:
    string name;
    void baa() { cout << name << ": Baa! Baa!" << endl; };
    static int TOTAL;
    static void FlockCount() {
      cout << "sheperd actually counted " <<
      TOTAL << " sheeps" << endl;
    }
};

int Sheep::TOTAL = 42;

you only have to map some stubs according to types of members and/or methods signatures:

Instance Member

struct Sheep_name { typedef string (Sheep::*type); };
template class private_member<Sheep_name, &Sheep::name>;

Instance Method

struct Sheep_baa { typedef void(Sheep::*type)(); };
template class private_method<Sheep_baa, &Sheep::baa>;

Static Instance Member

struct Sheep_TOTAL { typedef int *type; };
template class private_member<Sheep_TOTAL, &Sheep::TOTAL>;

Static Instance Method

struct Sheep_FlockCount { typedef void(*type)(); };
template class private_method<Sheep_FlockCount, &Sheep::FlockCount>;

just obtain a Sheep:

Sheep dolly = Sheep("Dolly");

// now we have a sheep under our complete control:

// - change dolly's identity
dolly.*member<Sheep_name>::value = "Lilly";

// - make dolly baa
(&dolly->*func<Sheep_baa>::ptr)();

// - steal dolly
int flockCount = *member<Sheep_TOTAL>::value -= 1;

// - let the sheperd realize it
(*func<Sheep_FlockCount>::ptr)();

Output:

Lilly: Baa! Baa!
sheperd actually counted 41 sheeps

Tested compilers which works with

clang

Works under OSX

gcc

Unkwown (please try and pull request to let me know :)

msvc

Unkwown (please try and pull request to let me know :)

Credits

Johannes Schaub (litb)

Dave Abrahams

Christof Warlich

License

Copyright 2017 Michelangelo Altamore. It may be redistributed under the terms specified in the LICENSE file.

About

Access to private members and methods of a C++ struct or class

Resources

License

Releases

No releases published
You can’t perform that action at this time.