我试图控制从单例对非常量成员函数的访问。我维护了一个类型列表,其中包含允许访问单例的非常量成员函数的所有类。我打算使用 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);
}