Заставить статический встроенный шаблон переменной шаблона класса работать через границы - PullRequest
0 голосов
/ 26 октября 2019

У меня проблема с тем, чтобы этот класс работал через границы.
Это шаблон класса, который предоставляет шаблон статической встроенной переменной.

Чтобы уменьшить масштаб проблемыи избавимся от специфических вещей библиотеки, рассмотрим следующий пример:

template<typename...>
class family {
    inline static int identifier{};

    template<typename...>
    inline static const int inner = identifier++;

public:
    template<typename... Type>
    inline static const int type = inner<std::decay_t<Type>...>;
};

struct foo {
    using bar = family<foo>;

    template<typename T>
    void quux() {
        const auto id = bar::type<T>;
        // do something with id
    }
};

Во многих случаях это работает просто отлично (короче говоря, когда видимость по умолчанию не скрыта ,поэтому он буквально ломается только в Windows для большинства пользователей).

Как вы можете догадаться, цель класса - генерировать последовательные числовые идентификаторы для типов.
Теперь у меня есть ситуация, когда яосновной исполняемый файл и две (или более) библиотеки DLL. Чтобы все заработало, мне нужно, чтобы все они ссылались на одни и те же переменные. Тем не менее, это не относится к Windows и когда видимость по умолчанию установлена ​​скрытой с помощью GCC / CLang.

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

Я почти уверен, что упускаю что-то очевидное здесь, но я не вижу, что именно. Любая помощь будет действительно оценена.

...