テンプレート引数にポインタを渡す

C++テンプレートテクニック 2-4


テンプレート引数にはコンパイル時に値が確定しているグローバル変数や関数のポインタも渡すことができます。

#include <iostream>
using std::cout; using std::endl;

template<class T,void (T::*M)()>
void func (T obj) {
    (obj.*M)();
}

class CClass {
public:
    void Get () { cout << "Get" << endl; }
};

int main () {
    CClass obj;
    
    func<CClass,&CClass::Get>(obj);
    
    return 0;
}
$ main
Get

処理としては単に渡したオブジェクトのメンバ変数を呼ぶだけのテンプレート関数です。

本には例としてプロパティを実現する使い方が載っていました。なかなか面白いですね。