Это хороший вопрос.Плетора вариаций типа c ++ затрудняет написание безопасных шаблонов, подобных описанным ниже.
template <typename T> struct FrameworkTemplate {
T mInstance;
};
Учтите, что теоретически пользователь может создать экземпляр шаблона вашего класса как
// assume A is a known default constructible type
FrameworkTemplate<A>
FrameworkTemplate<const A>
FrameworkTemplate<A const *>
FrameworkTemplate<A const &> // and so on
где последние три не являются конструктивными по умолчанию, хотя A может быть.Вот почему полезные универсальные типы, такие как any
, nullable
, lazy
и т. Д., Хотя и просты и интуитивно понятны на первый взгляд, не так уж легко реализовать (безопасно) в c ++ ...