У меня есть класс, содержащий несколько очень похожих функций и пару других функций, которые выполняют эти взаимозаменяемые функции в качестве входных данных.Ограничение функций, которые могут быть переданы другой функции в C++
Более простой пример:
class functions{
public:
int a();
int b();
int F(int (*f)()); //f can only be a() or b()
};
Перед тем, как поместить их в классе, у меня было что-то вроде
if(f!=a || f!=b) cout<<"error";
С класса, это кажется просто получить более сложным, так как я считаю, я теперь нужно передать экземпляр класса или что-то, чтобы избавиться от моего error: invalid use of member function
Я только начал изучать перечислимые списки, и похоже, что это сработало бы, если бы я с обычными переменными. Могу ли я создать перечисление функций?
Каков наилучший способ ограничить функции, которые могут быть переданы другой функции?
Я проводит статический метод произнесения, но по-прежнему нуждается в помощи с Int F (Int (* е)());
int functions::F(int (functions::*f)())
{
if(f==functions::a)
//gives error: invalid operands of types 'int (functions::*)()'
// and 'int (int(*)()' to binary operator =='
int x=f();
//gives error: must use ‘.*’ or ‘->*’ to call pointer-to-member
//function in 'f(...)'
int y=(functions.*f)();
//gives error: expected primary-expression before ‘.*’ token
return 0;
}
Ваш исходный код был действительно 'е = & a' , только адрес был неявным. Ну, нет никакого неявного адреса для функций-членов, вам действительно нужно сказать '& functions :: a'. Позже, чтобы назвать это, вы, вероятно, хотите сказать '(this -> * f)()' –
, что означает «неявный адрес для функций-членов»? – albiero
Это означает, что вы не можете оставить & if, если хотите, указатель на член. И вы не можете оставить * при использовании указателя на члена. –