Могу ли я написать функцию шаблона с аргументом T, который вызывает функцию-член foo
, если он существует в T
, и если он не вызывает свободную функцию foo(T)
вместо (и не может скомпилироваться, если ни один существует)?
Что-то вроде:
template<typename T>
int call_foo(T t) {
// if T::foo() exists
return t.foo();
// else return foo(t);
}
Как насчет обратного случая: предпочитая свободную функцию foo
перед функцией-членом? Я не могу использовать какие-либо функции, введенные после С++ 11.