Хороший улов! Я изменил заголовок в ответе. Спасибо!

я есть несколько классов, которые я не могу изменить. У каждого есть конструктор копирования, по крайней мере, один другой конструктор и функцияfoo() это возвращает некоторое значение. Я хочу создать шаблон класса, который может быть производным от каждого из этих классов и имеет элемент данных того же типа, что и возвращаемый типfoo() (извините, если я неправильно понял некоторые термины).

Другими словами, я хотел бы шаблон класса

template<typename T> class C : public T
{
  footype fooresult;
};

гдеfootype тип возвращаемого значенияT::foo().

Если бы все базовые классы имели, скажем, конструктор по умолчанию, я мог бы сделать

decltype(T().foo()) fooresult;

(с функциональностью C ++ 0x в GCC), но у классов нет общего конструктора, кроме конструкторов копирования.

GCC также не позволяетdecltype(this->foo())хотя, по-видимому, существует вероятность того, что это будет добавлено к стандарту C ++ 0x - кто-нибудь знает, насколько это вероятно?

Я чувствую, что должно быть возможно сделать что-то вродеdecltype(foo()) или жеdecltype(T::foo()) но те, кажется, не работают: GCC выдает ошибку видаcannot call member function 'int A::foo()' without object.

Конечно, я мог бы иметь дополнительный параметр шаблонаfootypeили даже неклассовый параметр типаT, но есть ли способ избежать этого?

Ответы на вопрос(2)

Ваш ответ на вопрос