Подтвердить что ты не робот

Есть ли способ создать специальные квалификаторы С++?

Есть ли способ реализовать спецификатор настраиваемого типа (аналогично 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
}

Причина, по которой я хотел бы сделать это, - это то, что я хочу, чтобы функции, вызываемые в определенном потоке, вызывали только функции, гарантирующие в реальном времени. Поскольку для многих приложений требуются жесткие потоки в режиме реального времени, некоторые способы обнаружения блокировок во время компиляции гарантируют нам, что многие трудно обнаружить ошибки времени выполнения не могут произойти.

4b9b3361

Ответ 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()
{

}

Возможно, вы можете написать какой-то сумасшедший макрос, который делает это прозрачно для каждой функции, которую вы хотите разрешить/запретить.