Хороший улов! Я изменил заголовок в ответе. Спасибо!
я есть несколько классов, которые я не могу изменить. У каждого есть конструктор копирования, по крайней мере, один другой конструктор и функция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
, но есть ли способ избежать этого?