У меня есть класс 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();
Как я могу это сделать?
Нельзя делать такую вещь, только с указателями функций, поскольку аргументы по умолчанию запрещены для указателя функций, и вы не можете назначить функцию 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();