Я пытаюсь использовать std :: is_same :: value в коде моего приложения. Ниже приведен пример кода, который я написал, чтобы воссоздать код моего приложения. Но я получаю ниже ошибку компилятора:
ошибка: нет соответствующей функции для вызова 'Y :: getName (bool &, bool &)'
Файл объявления:
class X {
std::string getName(bool a = false, bool b = false) { ... }
};
class Y {
std::string getName(bool a = false) { ... }
};
template<typename T>
std::string getMyName(const T &obj, bool a = false, bool b = false);
Файл приложения:
template<typename T>
std::string getMyName(const T &obj, bool a, bool b)
{
if (std::is_same<T, X>::value)
return obj->getName(a, b);
else
return obj->getName(a);
}
void callerFunc()
{
...
...
// X and Y are of pointer types
std::string strY = getMyName<Y>(y, true);
std::string strX = getMyName<X>(x, true, true);
}
Я использую C ++ 11 и не могу использовать более поздние версии. Пожалуйста, сообщите, если что-то не так с моим использованием.