Pull to refresh
7
0
Send message
Boost использует С++11, но в boost всегда можно получить ту же функциональность и без него.
Шаблон функции и шаблонная функция — синонимы.
К сожалению decltype не работает с типами, он работает с выражениями, в шаблоне его вывести не получится. Поэтому в данном случае я предпочел завернуть в макрос.
Абсолютно согласен насчет std::runtime_error, bad_cast более уместно.
Второе замечание, как мне кажется, делает код менее читаемым.
Согласен, Bool — пережитки прошлого. Decay тоже весьма правильное замечание. Спасибо за наводку!
Convert пока нигде не вызывается, в ходе работы пришлось закомментить, пока не восстановил функциональность. Вообще должно работать в более безопасной функции с автоматическим приведением типов Api::invoke.
Boost в таком виде не примет. Один из аспектов философии boost в том, что код должен работать на любой платформе и любом компиляторе. Использование C++11 уже не вписывается.
Мне тоже нравятся больше шаблоны, однако подобного рода шаблоны лучше спрятать в макросы:
{
    #m,
    (InvokeMem)&Invoker<decltype(&m)>::invoke<&m>,
    Invoker<decltype(&m)>::argCount(),
    Invoker<decltype(&m)>::types()
}

Почему это не завернуть в шаблонную функцию? На мой взгляд invokerTable<decltype(&Class::func), &Class::func>(«func») выглядит не так лаконично, как METHOD(func).

Information

Rating
Does not participate
Registered
Activity