Псевдоним функции, который подходит для заголовочного файла - PullRequest
0 голосов
/ 25 января 2019

Предположим, файл выглядит так:

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). Но с текущим кодом я не могу включить этот заголовочный файл, потому что ссылка на функцию будет определена несколько раз.

Как с этим бороться? Мне пришла в голову идея создания статического класса с этими псевдонимами внутри, но я никогда не видел такого подхода ни в одной библиотеке (так у них есть только одно жестко закодированное имя функции?).

Также у меня есть более глубокий вопрос. Вылечивают ли псевдонимы необходимость перекомпиляции пользовательского кода, если значение псевдонима изменилось (то есть псевдонимы функций, псевдонимы типов и другие)? Я полагаю, нет, потому что местоположение действительно вызываемой функции изменено, поэтому необходимо повторное связывание

1 Ответ

0 голосов
/ 25 января 2019

Вы почти у цели. Просто используйте это:

constexpr auto* Action = my::_details::ActionSinglePrecision;

Это может быть включено в несколько модулей перевода без проблем.

...