Boost logo

Boost :

Subject: [boost] [mpl] has_function
From: Lorenzo Caminiti (lorcaminiti_at_[hidden])
Date: 2010-03-21 09:11:31

Hello all,

Is there a way I can check if a class has a given member function
using metaprogramming?

What I need is to check at compile-time if a function is overriding a
virtual function or not. In the example below, z::f is overriding x::f
but not y::f (which does not exist) and the compiler knows that -- is
there a way I can extract that information from the compiler?

    struct has_function<class Base, ... /* other parameters */ > { ...
/* some implementation */ };

    struct x {
        virtual void f() {}

    struct y {
        virtual void g() {}

    struct z: x, y {
        void f() {
            cout << has_function<x, &z::f>::value << endl; // print 1
            cout << has_function<y, &z::f>::value << endl; // print 0

(This does not compile -- I do not know how to program it so it
compiles -- but it should give the idea of what I am looking for.)

Thank you very much.

Boost list run by bdawes at, gregod at, cpdaniel at, john at