Здравствуйте, sci_reseacher, Вы писали:
_>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
_>ну например как в Python _>
2) В С++
вместо сложной функции с хитрыми параметрами, сделать класс, каждый объект которого эквивалентен одному вызову функции:
f_mechanism f;
f.SetA( 2 );
f.SetB( 1 );
f.Run();
Но есть несколько вариантов разной степени навёрнутости шаблонной и макросной магии.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: вызывать функцию/метод с именами аргументов
Ну а если такая ситуация: в алгоритме принимает участие указатель на базовый класс, а много параметров появляется в потомках, то предусмотреть все setParam в базовом классе будет не возможным. Их нужно в конструкторе определять.
base *b;
switch(select){
case 1:
b = new specific_class(/*много параметров здесь*/);
// ...
}
b->work();
Re[3]: вызывать функцию/метод с именами аргументов
_>Ну а если такая ситуация: в алгоритме принимает участие указатель на базовый класс, а много параметров появляется в потомках, то предусмотреть все setParam в базовом классе будет не возможным. Их нужно в конструкторе определять.
Это у вас проблема с проектированием базового класса. Базовый класс не должен знать ничего о конкретной реализации потомков.
Вы случайно не фабрику изобретаете?
Здравствуйте, sci_reseacher, Вы писали:
_>Ну а если такая ситуация: в алгоритме принимает участие указатель на базовый класс, а много параметров появляется в потомках, то предусмотреть все setParam в базовом классе будет не возможным. Их нужно в конструкторе определять. _>
_>base *b;
_>switch(select){
_>case 1:
_> b = new specific_class(/*много параметров здесь*/);
_>// ...
_>}
b->>work();
_>
case1: {
auto res = new specific_class;
res->SetA( 2 );
res->SetB( 1 );
b = res;
} break;
только я бы ещё и case убрал, а сделал сразу мэппинг в соответстсвующие make-функции
base* make_specific_class()
{
auto res = new specific_class;
res->SetA( 2 );
res->SetB( 1 );
return res;
}
А мэппинг собирал бы статическими регистраторами... Тогда добавление ещё одного наследника было бы удобным...
Но те, кто это всё не любят, иногда делают так.
1) Возвращают из методов SetXXX this и пишут примерно так:
base *b;
switch(select){
case 1:
b = (new specific_class)
-> SetA( 2 )
-> SetB( 1 );
// ...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, sci_reseacher, Вы писали:
_>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
void f(int a, int b);
void f(int b, int a);
f(.a = 10, .b = 20); // Что должно вызываться?
Здравствуйте, sci_reseacher, Вы писали:
_>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
Давайте начнём с "корня зла": почему Вам требуется вызов функции с именованием параметров? Исходя из ситуации, можно подобрать лечение.
Re[2]: вызывать функцию/метод с именами аргументов
Здравствуйте, Mr.Delphist, Вы писали:
MD>Здравствуйте, sci_reseacher, Вы писали:
_>>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
MD>Давайте начнём с "корня зла": почему Вам требуется вызов функции с именованием параметров? Исходя из ситуации, можно подобрать лечение.
стремление писать эстетичный код )
Re[3]: вызывать функцию/метод с именами аргументов
Здравствуйте, sci_reseacher, Вы писали:
MD>>Давайте начнём с "корня зла": почему Вам требуется вызов функции с именованием параметров? Исходя из ситуации, можно подобрать лечение. _>стремление писать эстетичный код )
Переходи на тёмную сторону — в смолтоке, ObjC (и ObjC++) функции именуются ровно так: [obj callWithX:x andY:(y1+y2) andZ:222]
Перекуём баги на фичи!
Re[2]: вызывать функцию/метод с именами аргументов
Здравствуйте, Mr.Delphist, Вы писали:
MD>Здравствуйте, sci_reseacher, Вы писали:
_>>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
MD>Давайте начнём с "корня зла": почему Вам требуется вызов функции с именованием параметров? Исходя из ситуации, можно подобрать лечение.
Здравствуйте, sci_reseacher, Вы писали:
MD>>Давайте начнём с "корня зла": почему Вам требуется вызов функции с именованием параметров? Исходя из ситуации, можно подобрать лечение.
_>стремление писать эстетичный код )
Эстетика — штука вкусовая. Тут народ друг друга убивает на тему "отступы: пробелы vs табы", а когда приканчивают сторонников табов, начинают братоубийство на тему "сколько именно пробелов".
Вы с практической стороны ответьте: зачем требуется именование параметров. Может, прощу будет сериализованную строку пихать в метод, а он уж разберётся что к чему. Или структуру/DTO, как советовали выше. Или вообще кодогенерация сможет выручить, если есть рулы, по которым можно генериться.
Re[4]: вызывать функцию/метод с именами аргументов
_>возможно ли в С++ при вызове функции или метода кроме значений фактических параметров указывать имена параметров?
В С++ самом по себе — нельзя. Но желающих странного довольно много, так что есть странноватый Boost.Paramter: http://www.boost.org/doc/libs/1_60_0/libs/parameter/doc/html/index.html
Да здравствует мыло душистое и веревка пушистая.
Re[3]: вызывать функцию/метод с именами аргументов
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, _hum_, Вы писали:
__>>которое так и осталось предложением
SaZ>Всё правильно. Им тоже хочется, как и вам. Но лично мне не хочется. И коммитету по стандартизации, видимо, тоже
или не можется (см. пост PM о технических трудностях)