struct object {
void Name() {}
};
struct ABC:object { //Note:did not declare any constructor and base class is object
std::byte a;
const std::string* b;
int c;
}
struct BCD { //Note:did not declare any constructor and none base class
std::byte a;
const std::string* b;
int c;
}
я хочу, чтобы новая функция принимала:
New<ABC>({12,"first",123});
New<ABC>(a,b,c);
New<BCD>({12,"first",123});
New<BCD>(a,b,c);
это мое определение новой функции:
template <class _Ty, class... _Types, std::enable_if_t<!std::is_array_v<_Ty>, int> = 0>
auto New(std::initializer_list<std::any>&& _Args) {
//i can get type informationof the _Ty For use GC at here
return new _Ty(std::forward<_Types>(_Args)...);
//if need also can be record the pointer For use GC at here
}
но я не могу получить правильный результат;
Я использую последнюю версию V C ++ (vs2019). Таким образом, вы можете использовать этот инструмент для предоставления новейшего C ++ языкового стандарта.
Зачем мне нужна эта функция: Я хочу добавить G C в C ++, но мне нужно больше информации о типах, прежде чем выделять память. На самом деле я хочу получить информацию о типе до вызова оператора new. Это большой план, я думаю, что могу получить уникальный идентификатор информации (или использовать отражение), независимо от того, содержит ли тип сканирования набор указателей (ссылок) и их смещения. Это обеспечивает G C сканирование памяти во время выполнения. Улучшение консервативной производительности G C. Я только начал планировать.