Я пытаюсь контролировать доступ к неконстантным функциям-членам из одного файла. Я поддерживаю список типов всех классов, которым разрешен доступ к неконстантным функциям-членам синглтона. Я планирую использовать BOOST_TYPEOF (это), чтобы обнаружить во время компиляции, присутствует ли класс в списке типов. Однако эта проверка недопустима для статической функции-члена или функции, не относящейся к классу. Есть ли способ обнаружить это во время компиляции.
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);
}
Задача ещё не решена.