У меня есть класс A, который должен вызывать функции-члены шаблона класса B. Поиск по сайту Я нашел этот пример кода на этом сайте:
#include <iostream>
template<typename T, typename FType>
void bar(T& d, FType f) {
(d.*f)(); // call member function
}
struct foible
{
void say()
{
std::cout << "foible::say" << std::endl;
}
};
int main(void)
{
foible f;
bar(f, &foible::say); // types will be deduced automagically...
}
Это пришло из этого ответа: Метод C ++имя в качестве параметра шаблона
Но это не делает 100% того, что мне нужно.Как переписать приведенный выше код так, чтобы:
- метод
bar
был открытым членом класса, а не отдельной функцией - arguments
d
иf
, которые передаются методу bar
, являются public
членами того же класса, к которому bar
является членом, что позволяет bar
иметь тип void (void)
- тип объекта
foible
является классом, а не структурой (необязательно)?
[РЕДАКТИРОВАТЬ 1] Моя собственная попытка перезаписи, которая соответствует пунктам 1) и 2), заключается в следующем, что неверно:
#include <iostream>
template<class T, void (T::*FType)()>
class foo {
public:
T obj;
FType f;
void bar(void) {
(obj.*f)(); // call member function
} // end bar
}; // end class foo
struct foible
{
void say()
{
std::cout << "foible::say" << std::endl;
}
};
int main(void)
{
foible f;
foo<foible, void (foible::*)()> c;
c.T = f;
c.Ftype = &foible::say;
c.bar(); // types will be deduced automagically...
}
Моя цель состоит в том, чтобы объект типа «A» вызывал методы объекта типа «B», чтобы при выполнении этих методов объект типа «B» мог использовать егоуказатель для ссылки на свои локальные данные.Я хочу использовать указатели на функции внутри класса типа «А», чтобы их нужно было указывать только один раз, и я не хочу, чтобы один класс был производным от другого.