struct
и class
оба создают типы, которые являются классами в C ++.Так что логика не работает.
Как и большинство вопросов с множественным выбором, это мусор.
"оператор функции" - неоднозначно.Может быть, относится к оператору "вызов функции".Или, может быть, оператор указателя приведения к функции.http://eel.is/c%2B%2Bdraft/over.call как предположение.Так что я пойду с этим.
c.Позволяет создавать объекты, которые действуют синтаксически как функции.
Что такое "как"?Ни один объект не может действовать синтаксически идентично имени функции;имена функций действительно странные звери в C ++.Любая степень сходства или различия может оправдать или противопоказать этот ответ.Двусмысленная чепуха.
a.Требуется класс с перегруженным оператором.
Хорошо, правда;Я не знаю, как перегрузить вызов функции, не перегружая оператор класса (или используя лямбду, которая просто делает это за меня).
b.Требуется класс с оператором перегруженного ().
Преимущественно верно.Или, другими словами, false.
template<auto x>
using k=std::integral_constant<std::decay_t<dexltype(x)>,x>;
затем
void foo(){}
k<foo> not_foo;
not_foo
не перегружен operator()
все же not_foo()
можно считать перегрузкой вызова функции.
Однако он имеет перегруженную неявную приведение к указателю на функцию.Который может быть выбран, когда вы выполняете вызов функции.
Таким образом, b неверно, может быть.
Вопрос разбивает волосы, не будучи точным.Пожарный инструктор, возьми лучше.