Итак, в настоящее время я работаю над проектом по созданию библиотеки со всеми различными структурами данных на C++. Здесь я объявил класс Bag
:
template<typename Type>
class Bag
{
// ...
inline static const char* print_seperator = "\n";
public:
// ...
inline static void set_seperator(const char* new_seperator)
{
Bag::print_seperator = new_seperator;
}
}
Теперь это работает нормально, но когда я пытаюсь использовать это в своей функции main()
, вот так:
sgl::Bag::set_seperator(", ");
Это показывает следующую ошибку:
Argument list for class template
sgl::Bag
is missing
.. поэтому я дал список аргументов для шаблона класса:
sgl::Bag<int>::set_seperator(", ");
..и он отлично работает.
Но я не хочу печатать это каждый раз. Есть ли способ преодолеть это?
@AnoopRana Могу ли я получить быстрый пример этого? Потому что я уже пробовал template<typename Type = int>
, и это действительно не сработало.
См. Рабочая демонстрация в моем ответе ниже.
Вы можете использовать аргумент шаблона по умолчанию для параметра типа шаблона Type
, как показано ниже:
//use default argument for template type parameter "Type"
template<typename Type = int>
class Bag
{
// ...
inline static const char* print_seperator = "\n";
public:
// ...
inline static void set_seperator(const char* new_seperator)
{
Bag::print_seperator = new_seperator;
}
};
int main()
{
//no need to specify int
Bag<>::set_seperator(", "); //angle bracket still needed
return 0;
}
О имеет смысл. Спасибо за помощь.
@SolvedGames Добро пожаловать.
Вы можете использовать аргумент шаблона по умолчанию
template<typename Type = int> class Bag {//code here as before}; int main() {Bag<>::set_seperator(", ");}