Не должно быть возможно.Они будут рассматриваться как первые два.
Вы можете просто создать функцию с другим именем, взять два аргумента и вызвать f
.
В качестве альтернативы, если вы хотите эмулировать namedаргументы, вы можете использовать что-то похожее на Свободные интерфейсы .Пример:
#include <iostream>
using namespace std;
int f_impl(int a,int b, int c, int d){
cout << a << " " << b << " " << c << " " << d << endl;
return 42;
}
struct f{
int _a, _b, _c, _d;
f() : _a(10), _b(20), _c(30), _d(40){}
f& a(int a){ _a = a; return *this;}
f& b(int b){ _b = b; return *this;}
f& c(int c){ _c = c; return *this;}
f& d(int d){ _d = d; return *this;}
int operator()(){ return f_impl(_a, _b, _c, _d); }
};
#define F(x) (f()x())
int main(){
f().a(100).c(300)();
cout << F(.b(1000).d(4000)) << endl;
return 0;
}
Вывод:
100 20 300 40
10 1000 30 4000
42