мне нужно реализовать контейнер класса, который действует так же, как содержащийся в нем классе шаблона:метода C++, пересылка
template <typename T>
class Container {
public:
//...
private:
// T data_;
};
T
может быть либо предопределенный типа (например, int
) или определяемого пользователем типа.
Целью является перехват любых операций чтения/записи, выполняемых в указанном типе.
Я успешно реализовал большинство операторов, и он работает.
Однако, когда мне нужно получить доступ к методам конкретных содержавшихся класса T, он не работает:
Container<myclass> a;
a.myclass_specific_method();
Причина заключается в том, что Контейнер явно не имеет таких методов. Более того, поскольку T является шаблоном, его методы не могут быть известны заранее.
Я думаю, что решения этой проблемы нет, даже с C++ 11, потому что operator .
не может быть перегружен. Поэтому единственный возможный подход - всегда полагаться на operator->
, как и на умные указатели.
Можете ли вы подтвердить?
Не можете ли вы предоставить аксессуар (getter) для 'data_' и использовать его как:' a.get(). Myclass_specific_method(); '? –
Нет, не могу. Я хочу, чтобы Контейнер был максимально прозрачным для программиста. – Claudio