У меня есть класс шаблона, для которого мне нужен доступ к защищенной функции-члену параметра шаблона, например:
class Foo
{
protected:
void foo() {}
};
template<typename T>
class Bar
{
public:
static void bar(T& self){self.foo();}
};
...
Foo f;
Bar<Foo>::bar(f);
Моя проблема заключается в получении доступа к защищенному методу.Я попытался поместить friend class T
в Bar, но это не разрешено в c ++ (edit: и в любом случае не решил бы мою проблему, так что это казалось).Я попытался позволить Bar наследовать от T (template<typename T> class Bar: public T
(возможно, использовалось частное наследование, но открытый интерфейс Bar не очень важен, так как сам класс только внутренний)), но это не позволило получить доступ к foo()
или.Итак, как мне получить доступ к методу foo()
?
Edit: Foo
не должен знать Bar<Foo>
, так как существует довольно много Bar
классов.Однако я могу внести другие изменения в Foo (конечно, не изменяя общедоступный интерфейс).