Есть ли способ создать специальные квалификаторы С++?
Есть ли способ реализовать спецификатор настраиваемого типа (аналогично const)? Я хотел бы только разрешить вызовы функций функциям, имеющим правильную квалификацию, в пределах функций с одинаковой квалификацией.
Скажем, я бы:
void allowedFunction();
void disallowedFunction();
//Only allowed to call allowed functions.
void foo()
{
allowedFunction();
disallowedFunction(); //Cause compile time error
}
//Is allowed to call any function it wants.
void bar()
{
allowedFunction();
disallowedFunction(); //No error
}
Причина, по которой я хотел бы сделать это, - это то, что я хочу, чтобы функции, вызываемые в определенном потоке, вызывали только функции, гарантирующие в реальном времени. Поскольку для многих приложений требуются жесткие потоки в режиме реального времени, некоторые способы обнаружения блокировок во время компиляции гарантируют нам, что многие трудно обнаружить ошибки времени выполнения не могут произойти.
Ответы
Ответ 1
Возможно, вы можете поместить функции в класс и сделать разрешенных друзей этого класса следующим:
#include <iostream>
class X
{
static void f(){}
friend void foo(); // f() is only allowed for foo
};
void foo() // allowed
{
X::f();
}
void bar() // disallowed
{
//X::f(); // compile-time error
}
int main()
{
}
Возможно, вы можете написать какой-то сумасшедший макрос, который делает это прозрачно для каждой функции, которую вы хотите разрешить/запретить.