シングルトンから非 const メンバー関数へのアクセスを制御しようとしています。シングルトンの非定数メンバー関数へのアクセスを許可されているすべてのクラスの型リストを維持しています。BOOST_TYPEOF(this) を使用して、クラスがタイプリストに存在するかどうかをコンパイル時に検出することを計画しています。ただし、このチェックは、静的メンバー関数または非クラス関数からは無効です。コンパイル時にこれを検出する方法はありますか。
class A;
class B;
class C;
class Singleton{
....
public:
typedef LOKI_TYPELIST_2(ClassA, classB) allowed_list;
void doF_modify();
void doF() const;
}
#define set_pointer_check(A, TypeOfA) if(Loki::TL::IndexOf<Singleton::allowed_list, \
BOOST_TYPEOF(this)>::value == -1)\ //No non-const
std::static_assert(Loki::IsSame<BOOST_TYPEOF(A), \
const\
TypeOfA*>::value);
void A::doF() {
A* ptr;
set_pointer_chec(ptr, A);
}
void B::doF() {
B* ptr;
set_pointer_chec(ptr, B);
}
void C::doF() {
C* ptr;
set_pointer_chec(ptr, C);
}