0

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

0 回答 0