No C++ moderno é possível escrever um alias de função membro com uma sintaxe diferente desta:
class C {
int f(int a) { return ++a; }
inline int g(int a) { return f(a); }
};
Tentei de algumas maneiras, mas nenhuma funcionou:
class C {
int f(int a) { return ++a; }
const auto g1 = f; // error: 'auto' not allowed in non-static class member
auto& g2 = f; // error: 'auto' not allowed in non-static class member
using g3 = f; // error: unknown type name 'f'
};
Por favor, não sugira usar o pré-processador...
Por que preciso disso? Porque:
- Tenho um código existente que não posso modificar e que usa a função de membro antiga, e um código novo que deve usar a nova.
- Gostaria de evitar a chamada extra (mesmo que ela possa ser otimizada).
PS: erros gerados pelo clang 20.1.0
Até o momento (C++23), não há solução para ter aliases transparentes de funções ou funções-membro. Há uma proposta que adiciona exatamente o que você precisa:
P0945: Generalizando declarações de alias
Mas, até onde sei, não houve nenhuma atividade recente sobre esta proposta.
O mais próximo que você pode fazer hoje é usar uma função inline forçada: