Я начинал с какого-то SFINAE, но не совсем понимаю, в каких случаях я хочу его использовать.
Например, если у меня есть класс на основе шаблона, который должен иметь различные реализации функции в зависимости от параметра шаблона, например
template <typename T>
class cExampleClass
{
/// Function enabled when "cExampleClass::member" exists
auto overloadedFunction() -> decltype((std::declval<t>().member()),T::some_dependant_type())
{
// Do some stuff and use cExampleClass::member
}
/// Function enabled when "cExampleClass::member" does not exist
auto overloadedFunction() -> T::some_dependant_type()
{
// Do some different stuff
}
};
, где было бы идеально просто вызвать функцию как
object.overloadedFunction();
Мой компилятор выдает
ошибка: в 'class cARD' нет члена с именем 'member'
в строке decltype (даже когдафункция отката не определена).Это кажется противоречащим ответу здесь , так как правильно определить тип конечного возврата?
Кроме того, функция, очевидно, не может быть перегружена.Есть ли простой способ определить запасную функцию?