Я хотел бы использовать некоторое сопоставимое представление типа, которое не является прямым, как std :: is_same <>, и не использует RTTI. Макрос __PRETTY_FUNCTION__
дает одну и ту же строку для двух разных классов с одинаковым именем, определенных в разных файлах .cpp в анонимных пространствах имен, и сравнение строк происходит медленно.
Рассмотрим такой кусок кода:
template<typename T>
void func() {}
int main() {
std::cout << reinterpret_cast<size_t>(&func<int>) << std::endl;
std::cout << reinterpret_cast<size_t>(&func<float>) << std::endl;
}
Во-вторых, если вы хотите, чтобы целочисленный тип сохранял указатель, используйте uintptr_t
. И помните, что указатели на функции равны обычным указателям в системах самый, но есть системы и платформы, где они равны нет.
Я пытаюсь создать аналог std::any
, который можно было бы использовать без RTTI и исключений. std::any
фактически работает без RTTI, но единственный способ проверить, содержит ли он конкретный тип (с отключенным RTTI), - это использовать std::any_cast<T>
, который завершит работу приложения, если тип не совпадает и исключения отключены. Мне нужен механизм, чтобы проверить, безопасно ли reinterpret_cast
, содержащий данные для конкретного типа.
Прежде всего, какую проблему настоящий вы пытаетесь решить? Почему вы хотите сделать что-то подобное? Связанное чтение о проблема XY.