Почему именованные параметры используются реже?

Я разработал класс параметров, который позволяет мне писать такой код:

//define parameter
typedef basic_config_param<std::string> name;

void test(config_param param) {

  if(param.has<name>()) { //by name
    cout << "Your name is: " << param.get<name>() << endl;
  }

  unsigned long & n = param<ref<unsigned long> >(); //by type
  if(param.get<value<bool> >(true)) { //return true if not found
    ++n;
  }
}


unsigned long num = 0;
test(( name("Special :-)"), ref<unsigned long>(num) )); //easy to add a number parameter
cout << "Number is: " << num; //prints 1

Производительность класса довольно высока: все просто ссылку в стеке. И чтобы сохранить всю информацию, я использую внутренний буфер до 5 аргументов, прежде чем он перейдет к выделению кучи, чтобы уменьшить размер каждого отдельного объекта, но это можно легко изменить.

Почему бы и нет этот синтаксис используется чаще, перегружая оператор, () для реализации именованных параметров? Это из-за потенциального снижения производительности?

Еще один способ - использовать именованную идиому:

object.name("my name").ref(num); //every object method returns a reference to itself, allow object chaining.

Но для мне, перегрузка оператора , () выглядит гораздо более "современным" C++, если вы не забываете использовать двойные скобки Производительность также не сильно страдает, даже если она медленнее, чем обычная функция , поэтому в большинстве случаев им можно пренебречь.

Вероятно, я не первый, кто придумал подобное решение, но почему оно не встречается чаще? Я никогда не видел ничего похожего на приведенный выше синтаксис (мой пример) до того, как написал класс, который его принимает, но для меня он выглядит идеально.

9
задан Dukeling 22 July 2015 в 12:42
поделиться