次のコードを検討してください
template<typename T, int N>
struct A {
typedef T value_type; // OK. save T to value_type
static const int size = N; // OK. save N to size
};
このパラメーターが型名または整数値である場合、任意のテンプレート パラメーターを保存できます。問題は、メンバーへのポインターがオフセット、つまり整数であることです。ここで、コンパイル時にメンバーへのポインターを保存します。
struct Foo {
int m;
int r;
};
template<int Foo::*ptr_to_member>
struct B {
// Next statement DOES NOT WORK!
static int Foo::* const saved_ptr_to_member = ptr_to_member;
};
// Example of using
int main() {
typedef B<&Foo::m> Bm;
typedef B<&Foo::r> Br;
Foo foo;
std::cout << (foo.*(Bm::saved_ptr_to_member));
}
コンパイル時にメンバーへのポインターを保存する方法は? 私はVS2008を使用しています。
ノート。コンパイル時間は重要です。ランタイム ソリューションを記述しないでください。私はそれを知っている。