Использование Wrapper с указателями на функции для обработки значения по умолчанию для аргументов

0

У меня есть класс C++ Wrapper для интерфейса C. Одна функция в этом интерфейсе имеет аргумент с параметром по умолчанию:

api.h:
int Foo(int bar=5);

Это Wrapper:

Wrapper.hpp:
class Wrapper
{
public:
   static int (*Foo) (int bar);
}

Wrapper.cpp:
int (*Wrapper::Foo)(int bar);

Здесь я использую функцию с Wrapper:

Wrapper::Foo(5);

Но я также хочу иметь возможность вызывать Foo без аргумента, поэтому он принимает значение по умолчанию 5:

Wrapper::Foo();

Как я могу это сделать?

Теги:
function-pointers
default-value

1 ответ

3
Лучший ответ

Нельзя делать такую вещь, только с указателями функций, поскольку аргументы по умолчанию запрещены для указателя функций, и вы не можете назначить функцию int(int) для функции int().

N3376 8.3.6/3

Аргумент по умолчанию должен указываться только в объявлении параметра-объявления объявления функции

Почему вы хотите использовать указатели? Просто напишите функцию, которая вызовет функцию из API.

class Wrapper
{
public:
   static int Foo (int bar) 
   { 
      return ::Foo(bar); 
   }
   static int Foo ()
   {
      return ::Foo();
   }
}

Wrapper::Foo(1);
Wrapper::Foo();
  • 1
    Однако помните, что у вас нет гарантии того, что значения по умолчанию, используемые в обертке, такие же, как в API, особенно если у вас нет контроля над API, и значение по умолчанию может измениться в любое время.
  • 0
    @ согласен. сейчас такой проблемы нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню