Основной вопрос в заголовке, идея в ограничении доступа к методу своего класса: С::serialize(). (код сильно сокращён)
class Type1
{
public:
template
class Type2
{
public:
template
class C
{
int v;
template
//------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])//
{
Type t;
C c;
t & c & c & c;
return 0;
}
Задача - правильно написать friend. Вызывать метод С::serialize из оператора Type::operator&() Классов Type будет неопределённое количество.
template
ни один вариант не прокатывает.
Ответ
Не уверен, что сделать именно так вообще возможно. Если бы такое было возможно, то компилятору бы пришлось прочёсывать все классы в поисках метода. Но утверждать, что так нельзя не буду — нет доказательств.
Т.к. задача не совсем ясна, то я могу предложить следующее решение:
class C
{
int v = 10;
template
template
class Type1
{
public:
Type1& operator&(int t) {/*полезные действия*/return *this; }
};
class Type2
{
public:
Type2& operator&(int t) {/*полезные действия*/return *this; }
};
Как Вы можете видеть, я вынес операторы из Ваших Type# классов в один общий, и сделал эту функцию другом C. Сложно сказать, насколько это поможет Вам, т.к. повторюсь — Ваша задача не совсем ясна.
Комментариев нет:
Отправить комментарий