How do you implement this Python idiom in C++

Ames Andreas Andreas.Ames at comergo.com
Thu Jul 27 14:00:04 EDT 2006


> -----Original Message-----
> From: python-list-bounces+andreas.ames=comergo.com at python.org 
> [mailto:python-list-bounces+andreas.ames=comergo.com at python.or
g] On Behalf Of alainpoint at yahoo.fr
> Sent: Thursday, July 27, 2006 5:51 PM
> Subject: How do you implement this Python idiom in C++
> 
> I am no C++ expert but i guess there might be some in the Python and
> C++ newsgroups. 

You could try sth. like this:

<cpp>
#include <iostream>


template<class T> class Counted {
    static int count;
public:
    Counted() { ++count; }
    Counted(const Counted<T>&) { ++count; }
    ~Counted() { --count; }
    template <class V> friend int getCount(V&);
};

template<class T> int Counted<T>::count = 0;

// Curious class definitions
class CountedClass : private Counted<CountedClass> {};
class CountedClass2 : private Counted<CountedClass2> {};
class CountedClass3 : public CountedClass, private Counted<CountedClass3> {};

template <class T>
int getCount(T &)
{
    return Counted<T>::count;
}


using namespace std;

int main() {
  CountedClass a;
  cout << getCount(a) << endl;    // 1
  CountedClass b;
  cout << getCount(b) << endl;    // 2
  CountedClass3 c;
  cout << getCount(c) << endl;    // 1
  cout << getCount(a) << endl;    // 3 and should be 2??
}
</cpp>

Your last assertion ('should be 2') is questionable, IMHO.  I think the above code has it right in this case rather than your python version (after all c isA CountedClass, isn't it?).


cheers,

aa


-- 
Andreas Ames | Programmer | Comergo GmbH |
Voice:  +49 69 7505 3213 | ames AT avaya DOT com



More information about the Python-list mailing list