Есть ли аргумент по умолчанию для шаблона класса, создать экземпляр шаблона?

Создает ли следующий аргумент по умолчанию для шаблона экземпляр шаблона с типом EmptyClass?

class EmptyClass{};

template <typename TYPE=EmptyClass>
class Sample
{
public:
static void test()
{
TYPE::Serialize();
}
};

0

Решение

Нет, в этом коде создается любой экземпляр EmptyClass. Сериализация — это статическая функция. И конструктор EmptyClass никогда не вызывается (в показанном коде)

-1

Другие решения

Нет. Шаблоны создаются при использовании и создаются для каждой функции.

Значения параметров по умолчанию — это только те типы, которые используются, когда параметр не указан. Но сами по себе не подразумевают использование.

Когда вы звоните Sample<>::test() затем Sample<Emptyclass>::test() создается и EmptyClass::serialize() попытка вызова, приводящая к ошибке времени компиляции (так как Emptyclass объявлен как не имеющий такой функции)

Попробуйте создать больше функций, содержащих разные ошибки времени компиляции, относящиеся к разным параметрам, и вы увидите, как до тех пор, пока функция не используется, ошибка не возникает.

0

По вопросам рекламы [email protected]