Предположим, у меня есть такой класс:
template <typename T>
struct S {
int n = 1;
S(T t) : n(t) {};
S() = default;
};
Можно ли что-то изменить, чтобы можно было создать экземпляр S
без аргументов шаблона в случае, если я хочу использовать такой конструктор по умолчанию S s {};
?
Лучшее, что я придумал, - это присвоить какое-то фиктивное значение по умолчанию аргументу шаблона, чтобы он стал необязательным:
#include <iostream>
struct default_ {};
template <typename T = default_>
struct S {
int n = 1;
S(T t) : n(t) {};
S() = default;
};
int main() {
S<int> s1 {10};
std::cout << "Value:\n" << s1.n << std::endl;
S s2 {};
std::cout << "Value:\n" << s2.n << std::endl;
}
https://repl.it/repls/RegalCoolDeal