Как проверить, является аргумент по умолчанию в шаблоне или нет?
Я хочу вызывать функцию без дополнительных аргументов, но мне нужно добавить проверку внутри функции, что бы узнать был добавлен аргумент по умолчанию или нет.
template <class T1, class T2>
void NumbVector(T1& int_numb = 1, T2& string_numb) {
// проверку желательно сделать на уровне if
if (?) {
...
}
...
}
сам вызов
NumbVector(10, 3);
NumbVector(1);
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Вот пример
// эта функция содержит всю логику
// можно сказать, что оно "приватная"
// n - это дополнительный парамер
template <class T1, class T2>
void NumbVector(T1& int_numb, T2& string_numb, int n) {
if (n == 1) {
// позвали функцию с одним параметром
} else {
// позвали функцию с двумя параметрами
}
}
// это функция с двумя параметрами
template <class T1, class T2>
void NumbVector2(T1& int_numb, T2& NumbVector) {
// 2 в параметре как раз и означает, что вызывается функция с двумя параметрами
// но это условность. Можно прицепить bool, можно enum.
NumbVector(int_numb, NumbVector, 2);
}
// а это - с одним
template <class T1, class T2>
void NumbVector1(T2& string_numb) {
// а тут вот так пришлось, потому что параметр передается по ссылке.
// может это ошибка, а может это так и задумано
int x = 1;
NumbVector(x, string_numb, 1);
}
потом можно пойти дальше и прикрутить std::forward, а может использовать variadic template. Но нужно ли это?
Возможно, Ваша задача сильно проще и есть более красивые решения.