Использование указателя this в шаблоне

522
28 января 2018, 02:54

Добрый день.

Пишу простой код, хочу сделать контроль доступа к данным в классе через отдельный класс:

template<class Tclass, Tclass* classptr> class ptr_storage_access_control_tmp {
public:
};

class a {
    friend ptr_storage_access_control_tmp<a, this>;
public:
};

В строке

 friend ptr_storage_access_control_tmp<a, this>;

транслятор выдает диагностику:

Ошибка (активно) E0258 оператор "this" можно использовать только внутри нестатической функции-члена

Вопрос:

  1. Почему нельзя объявить другом такой класс?

Спасибо.

UPD1:

Да, забыл сказать, транслятор Visual Studio 2017.

Answer 1

Потому что значение this известно только на этапе работы программы (а аргумент шаблона должен известен на этапе компиляции) и доступно только из нестатического метода. Если хотете дать доступ просто классу ptr_storage_access_control_tmp:

template<class Tclass, Tclass* classptr> friend class    
ptr_storage_access_control_tmp;
READ ALSO
Qt смена шрифта

Qt смена шрифта

Программирую софт на OpenSuse с фиксированым шрифтомПри запуске софта на другом дистрибутиве, к примеру на Ubuntu, выстовляется другой шрифт

263
отрицательное число в индексах

отрицательное число в индексах

Oбычно в индексах массивов, контейнеров используется беззнаковое числоК тому же unsigned(-1) компилятором преобразовывается на большое положительное...

253
кодировка строк в Java

кодировка строк в Java

Учу яваПри написание потребовалась перекодировать полученную строку

228
Unable to merge dex

Unable to merge dex

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'

387