Предположим, файл выглядит так:
my_code.h:
namespace my {
namespace _details{
int ActionNoPrecision(int a);
float ActionSinglePrecision(float a);
double ActionDoublePrecision(double a);
}
auto& Action = my::_details::ActionSinglePrecision;
}
my_code.cpp - реализует эти функции
Итак, Action - это псевдоним функции, который должен вызываться из кода пользователя. Со своей стороны, я хочу контролировать значение этого псевдонима, не затрагивая исходный код пользователя (то есть пользователи по-прежнему вызывают Action, но Action = ActionDoublePrecision). Но с текущим кодом я не могу включить этот заголовочный файл, потому что ссылка на функцию будет определена несколько раз.
Как с этим бороться? Мне пришла в голову идея создания статического класса с этими псевдонимами внутри, но я никогда не видел такого подхода ни в одной библиотеке (так у них есть только одно жестко закодированное имя функции?).
Также у меня есть более глубокий вопрос. Вылечивают ли псевдонимы необходимость перекомпиляции пользовательского кода, если значение псевдонима изменилось (то есть псевдонимы функций, псевдонимы типов и другие)? Я полагаю, нет, потому что местоположение действительно вызываемой функции изменено, поэтому необходимо повторное связывание