Сообщение Re[2]: Адрес конструктора от 17.07.2019 18:54
Изменено 17.07.2019 19:00 nen777w
Re[2]: Адрес конструктора
N>>И есть ли возможность таки этот адрес получить?
_>Нафига? Если сильно хочется сделайте функцию создающую экземпляр и используйте её адрес.
Для MSVC пришлось немного навернуть до:
Но в целом идея понятна.
_>Нафига? Если сильно хочется сделайте функцию создающую экземпляр и используйте её адрес.
Для MSVC пришлось немного навернуть до:
struct dummy {};
void* operator new(size_t size, dummy, void* where) { return where; }
template<class T, typename ...TArg> T* ctor(void *place, TArg... args) { return new(dummy(), place) T(args...); }
template<class T, typename ...TArg> char* get_ctor_addr() {
decltype(&ctor<T, TArg...>) f = &ctor<T, TArg...>;
return reinterpret_cast<char*>(reinterpret_cast<void*&>(f));
}
struct A
{
A();
};
struct B
{
B(int);
};
char *pA = get_ctor_addr<A>();
char *pB = get_ctor_addr<B, int>();
Но в целом идея понятна.
Re[2]: Адрес конструктора
N>>И есть ли возможность таки этот адрес получить?
_>Нафига? Если сильно хочется сделайте функцию создающую экземпляр и используйте её адрес.
Для MSVC пришлось немного навернуть до:
Но в целом идея понятна. Единственное что попробую улучшить это написать дополнительную функцию для поиска call <адрес конструктора> в этой get_ctor_addr().
_>Нафига? Если сильно хочется сделайте функцию создающую экземпляр и используйте её адрес.
Для MSVC пришлось немного навернуть до:
struct dummy {};
void* operator new(size_t size, dummy, void* where) { return where; }
template<class T, typename ...TArg> T* ctor(void *place, TArg... args) { return new(dummy(), place) T(args...); }
template<class T, typename ...TArg> char* get_ctor_addr() {
decltype(&ctor<T, TArg...>) f = &ctor<T, TArg...>;
return reinterpret_cast<char*>(reinterpret_cast<void*&>(f));
}
struct A
{
A();
};
struct B
{
B(int);
};
char *pA = get_ctor_addr<A>();
char *pB = get_ctor_addr<B, int>();
Но в целом идея понятна. Единственное что попробую улучшить это написать дополнительную функцию для поиска call <адрес конструктора> в этой get_ctor_addr().