Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 1 / 1
Регистрация: 28.12.2023
Сообщений: 134

Можно ли как то явно указать какой параметр передаём в функцию

28.09.2024, 23:01. Показов 1005. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
до c++ изучал c# и там можно было явно указать какому параметру метода мы передаём значение
C#
1
2
3
4
5
6
7
8
void Foo(int a, int c) { 
 // логика
}
 
void main() {  
 
 Foo (c: 3, a: 1); // можно ли делать что то по типу этого?
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2024, 23:01
Ответы с готовыми решениями:

Можно ли как-то явно указать группу в ProcessStartInfo?
уч.запись добавлена в группу пользователей Права на папку выданы группе При запуске process от имении пользователя При попытке...

Явно указать какой из перегруженных методов надо вызвать
Смотрите, есть 2 перегруженных метода (exe), делают одно и тоже, возвращают немного разные результаты, более конкретно класс при помощи...

Можно ли как нибудь явно указать тип переменной, чтобы ИДЕ рассказала мне все что я хочу знать об объекте?
Можно как нибудь указать тип, но не через оператор new...

8
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
28.09.2024, 23:05
C++ не поддерживает именованные параметры напрямую, как это делается в C#

можно шлёпнуть структуру или класс, через который передавать параметры, типа так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
struct FooParams {
    int a;
    int c;
};
 
void Foo(const FooParams& params) {
    std::cout << "a: " << params.a << ", c: " << params.c << std::endl;
}
 
int main() {
    FooParams params = { .a = 1, .c = 3 };  // Именованные параметры в стиле C++20
    Foo(params);
    return 0;
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,236
28.09.2024, 23:21
Цитата Сообщение от WeiTers Посмотреть сообщение
Можно ли как то явно указать какой параметр передаём в функцию
Смотря что вы имеете в виду под "явно указать". Языки, которые поддерживают такое явное указание, делают это в первую очередь для того, чтобы не беспокоиться о порядке передачи аргументов в точке вызова. То есть для того, чтобы вы могли передавать аргументы в ином порядке, отличающимся от порядка объявления параметров функции. Как, кстати, и сделано в вашем же примере.

Вышеприведенный вариант с использованием designated initializers не позволяет менять порядок, так как в С++ запрещается перечислять designated initializers для класса в "неправильном" порядке. В С изменение порядка в таком инициализаторе разрешается, в С++ - нет.

Цитата Сообщение от WeiTers Посмотреть сообщение
Foo (c: 3, a: 1); // можно ли делать что то по типу этого?
У вас в примере порядок как раз таки изменен. То есть вышеприведенный ответ не является ответом на ваш вопрос. Почему вы тогда отметили его как "ответ"?

Использовать класс для реализации такой функциональности можно, но придется использовать индивидуальные присваивания для назначения значений полям. Что, конечно же, будет очень громоздко.
1
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.09.2024, 23:26
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вышеприведенный вариант с использованием designated initializers не позволяет менять порядок, так как в С++ запрещается перечислять designated initializers для класса в "неправильном" порядке.
Приведу цитату :
Designated initializers
The syntax forms (3,4) are known as designated initializers: each designator must name a direct non-static data member of T, and all designator s used in the expression must appear in the same order as the data members of T.

C++
1
2
3
4
struct A { int x; int y; int z; };
 
A a{.y = 2, .x = 1}; // error; designator order does not match declaration order
A b{.x = 1, .z = 2}; // ok, b.y initialized to 0
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
28.09.2024, 23:28
TheCalligrapher,
хорошо, чтобы менять порядок пока придумал только воспользоваться шаблоном Builder, не знаю насколько это уместно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
class FooBuilder {
    int a = 0;
    int c = 0;
 
public:
    FooBuilder& setA(int value) {
        a = value;
        return *this;
    }
 
    FooBuilder& setC(int value) {
        c = value;
        return *this;
    }
 
    void build() const {
        std::cout << "a: " << a << ", c: " << c << std::endl;
    }
};
 
int main() {
    FooBuilder().setC(1).setA(3).build();
    FooBuilder().setA(1).setC(3).build();
 
    return 0;
}
у вас есть варианты лучше?)))
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.09.2024, 23:32
Цитата Сообщение от abit Посмотреть сообщение
у вас есть варианты лучше?)))
Лично у меня нет желания выдумывать то что мне не нужно.
Даже если что-то где то в других ЯП мне нравилось.
Используем то что есть.
Все такие потуги, лишь трата времени.
Потому что : "Ничего не бывает просто так. За всё нужно платить."
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
28.09.2024, 23:36
Цитата Сообщение от SmallEvil Посмотреть сообщение
Лично у меня нет желания выдумывать то что мне не нужно.
Ну а чего тогда теоретизировать, по сути ответ автору поста дан
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
28.09.2024, 23:40
Цитата Сообщение от abit Посмотреть сообщение
Ну а чего тогда теоретизировать, по сути ответ автору поста дан
Он проснется утром, протрет глаза и поймет что ему тут дали
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
28.09.2024, 23:42
Цитата Сообщение от SmallEvil Посмотреть сообщение
Он проснется утром, протрет глаза и поймет что ему тут дали
Да что такого, ему в лоб сказали как в C# нельзя, дал варианты как можно раскорячиться, если сильно надо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2024, 23:42
Помогаю со студенческими работами здесь

Можно ли указать путь к Application Data, не прописывая его явно
Здравствуйте! Пишу приложение, которое должно работать на разных компьютерах. На всех компьютерах установлена ОС Windows XP. Программа...

Как явно указать .dll в проекте
Может кто знает, как явно указать .dll в проекте. Смотрел в других местах, везде ссылаются на LoadLibrary. Как я понял, она в сборке...

Как изменить или явно указать версию SQL Server?
Проблема следующего характера: С помощью EntityFramework создается база данных, в моем случае это CodeFirstDemo: class...

Регионы: как явно указать строку, где заканчивается часть кода?
Подскажите пожалуйста, как явно указать строку, где заканчивается часть кода. Ввёл регион позже-скрывает всю программу. Добавлено...

Можно ли передать указатель на функцию как параметр другой функции?
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru