У меня проблема с тем, чтобы этот класс работал через границы.
Это шаблон класса, который предоставляет шаблон статической встроенной переменной.
Чтобы уменьшить масштаб проблемыи избавимся от специфических вещей библиотеки, рассмотрим следующий пример:
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.
Я изо всех сил пытаюсь найти правильный способ заставить его работать, скажем так как и ожидалось . Пока что все мои попытки провалились. Я попытался экспортировать класс и явно создать его экземпляр, а также шаблон переменной для типов, которые меня интересуют. Однако, это не сработало.
Я почти уверен, что упускаю что-то очевидное здесь, но я не вижу, что именно. Любая помощь будет действительно оценена.