У меня есть 3 функции в файле заголовка
template <typename T>
const T &minD(T const& a, T const& b)
{
if (a > b)
{
return b;
}
else
{
return a;
}
}
Это целевая функция, с которой я пытаюсь сопоставить параметры с аргументами
char *minD(char * a, char * b)
{
if (strcmp(a, b) > 0)
{
return b;
}
else
{
return a;
}
}
Это функция, которая должна вызывать обе функции, описанные выше, в зависимости от типов параметров.
template <typename T>
const T &minD(T const &a, T const &b, T const &c)
{
return minD(minD(a, b), c);
}
Моя цель состоит в том, если данные аргументы в приведенной выше функции соответствуют типу char * необходимо вызвать minD с аргументами типа char *. Если тип аргумента - любой другой тип, он должен вызывать первую функцию, которая имеет аргументы типа шаблона.
Первое, что я сделал, это попытался вызвать minD (minD (& a, & b), & c) и изменить function2 на const char *minD(const char * a, const char * b)
, но компилятор говорит, что не может преобразовать const T * в const char *. Второе, что я сделал, - это изменить тип параметра второй функции на const char * minD(const char& a, const char& b)
и вызвать функцию с minD(minD(a, b), c)
, но затем компилятор выдает ошибку о возможной потере данных из преобразования const T в const char.
Здесь следует отметить одну вещь: я не могу изменить тип параметра
template <typename T>
const T &minD(T const &a, T const &b, T const &c)
Примеры вызовов функций:
val = minD(42, 7, 68);
Этот вызов является вызовом функции для 3-я функция, а затем 3-я функция должна вызвать 1-ю функцию, чтобы получить правильный ответ.
const char * const s0 = "CSC";
const char * const s1 = "461";
const char * const s2 = "Optimized C++";
s = minD(s0, s1, s2);
Этот вызов является вызовом функции 3-й функции, а затем 3-я функция должна вызвать 2-ю функцию чтобы получить правильный ответ.
Я не могу понять, что я здесь делаю не так. Пожалуйста, помогите.