Get tipo de retorno da função de membro sem um objeto
Tenho várias classes que não posso modificar. Cada um tem um construtor de cópia, pelo menos um outro construtor e uma funçãofoo()
que retorna algum valor. Eu quero criar um modelo de classe que possa derivar de cada uma dessas classes e tenha um membro de dados que seja do mesmo tipo que o retorno, tipo defoo()
(desculpe se tenho alguma terminologia errada
Em outras palavras, eu gostaria de um modelo de classe
template<typename T> class C : public T
{
footype fooresult;
};
Ondefootype
é o tipo de retorno deT::foo()
.
Se todas as classes base tivessem, digamos, um construtor padrão, eu poderia fazer
decltype(T().foo()) fooresult;
(com a funcionalidade C ++ 0x no GCC), mas as classes não têm nenhum construtor específico em comum, além dos construtores de cópi
GCC também não permitedecltype(this->foo())
, embora aparentemente haja a possibilidade de isso ser adicionado ao padrão C ++ 0x - alguém sabe qual é a probabilidade diss
Sinto que deveria ser possível fazer algo comodecltype(foo())
oudecltype(T::foo())
mas parece que não funciona: o GCC apresenta um erro no formuláriocannot call member function 'int A::foo()' without object
.
Claro, eu poderia ter um parâmetro de modelo extrafootype
ou mesmo um parâmetro que não seja da classe do tipoT
, mas existe alguma maneira de evitar isso?