Как определить хорошую / совершенную функцию New для инициализации любого класса / структуры в C ++? - PullRequest
0 голосов
/ 09 апреля 2020
    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. Я только начал планировать.

...