views:

92

answers:

3

Hi

I have a python dictionary stored in a file which I need to access from a c++ program. What is the best way of doing this?

Thanks

+1  A: 

There are umpteen Python/C++ bindings (including the one in Boost) but I suggest KISS: not a Python/C++ binding but the principle "Keep It Simple, Stupid".

Use a Python program to access the dictionary. :-)

You can access the Python program(s) from C++ by running them, or you can do more fancy things such as communicating between Python and C++ via sockets or e.g. Windows "mailslots" or even some more full-fledged interprocess communication scheme.

Cheers & hth.

Alf P. Steinbach
+2  A: 

How to do this depends on the python types you've serialised. Basically, python prints something like...

{1: 'one', 2: 'two'}

...so you need code to parse this. The simplest case is a flat map from one simple type to another, say int to int:

int key, value;

if (s >> c && c == '{')
    while (s >> key)
    {
        if (s >> c && c == ':' && s >> value)
            my_map[key] = value;
        if (s >> c && c != ',')
            break;
    }

You can build on this, adding parsing error messages, supporting embedded containers, string types etc..

You may be able to find some existing implementation - I'm not sure. Anyway, this gives you a very rough idea of what they must do internally.

Tony
Thanks for that Tony
mikip
You're welcome. Happy coding.
Tony
A: 

I assume your Python dict is using simple data types and no objects (so strings/numbers/lists/nested dicts), since you want to use it in C++.

I would suggest using json library (http://docs.python.org/library/json.html) to deserialize it and then use a C++ equivalent to serialize it to a C++ object.

Torsten