Как определить функцию-член в области действия функции-члена?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как определить функцию-член в области действия функции-члена?

Сообщение Anonymous »

Это вопрос о простоте использования. Мое главное желание состоит в том, чтобы, когда я сворачиваю код класса, за исключением области тела класса, то, что я вижу и читаю, было как можно более кратким и необходимым, включая все атрибуты и члены.
У меня есть шаблон класса с функцией шаблона-члена eval_sub, который используется только внутри функции-члена eval. Хотя удаление eval_sub является спорным, наличие eval_sub облегчает чтение, поскольку eval_sub существует именно так. Однако мне не нравится видимость eval_sub после свертывания определения eval, потому что eval_sub имеет значение только для eval.
< pre class="lang-cpp Prettyprint-override">

Код: Выделить всё

template
struct A{
double x;
template void eval_sub(){
x+=exp(k);
}
void eval(){
[this](std::index_sequence){ (eval_sub(), ...); }(std::make_index_sequence{});
}
};
Вопрос: Как скрыть eval_sub в области eval?
Что я пробовал:
  • автоматическая лямбда, очевидно, работает, но я отказываюсь от нее по нескольким причинам. 1) авто неявно. 2) Эксплитизация бесполезна не из-за языковой болезни в жаргоне указателей, а из-за того факта, что такой указатель (он же «лямбда») никогда не нужен. Показательный пример: мне не нужно помещать адрес eval_sub в переменную только для того, чтобы вызвать ее. Скорее, автоматическая лямбда является джейлбрейком, который просто не позволяет компилятору отклонить определение функции в области видимости функции.
  • помещение статической структуры перед eval_sub уничтожает функцию-член характеристика, заключающаяся в том, что перед каждым доступом к атрибуту внутри eval_sub мне теперь придется захватывать дескриптор A this, что стирает полезность.
Как вы подходите к этой распространенной проблеме? Мое нынешнее решение состоит в том, что я живу с раздражением при сбое объема чтения около 10 членов класса, хотя на самом деле их должно быть только около трех.
PS: Я знаю, что запрещает язык. Мне любопытно, как потребители языка (то есть эта аудитория) решают эту дилемму. Как вы обычно поступаете в этом случае? Если ответ «авто лямбда», то я сдаюсь.

Подробнее здесь: https://stackoverflow.com/questions/784 ... ions-scope
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»