Я хотел бы написать функцию, которая применяет процесс к члену класса. Следующий код работает:Передача указателя на класс в качестве параметра шаблона
class AA
{
public:
AA(){};
~AA(){};
std::string type="AA";
};
class BB
{
public:
BB(){};
~BB(){};
template <typename T, typename TT>
void test(T& a, TT(T::*memberPtr))
{
std::cout<<"test: "<<(a.*memberPtr)<<std::endl;
}
std::string type="BB";
};
int main()
{
AA a;
BB b;
b.test(a, &AA::type);
}
Но я знаю, что все, что во время компиляции, так что я интересно, если это возможно, чтобы написать что-то эквивалентное, но только с шаблонами? Так что я мог бы написать что-то вроде:
b.test<&AA::type>(a);
, который вызывает в тесте (а):
std::cout<<"test: "<< (a.*MEMBER) <<std::endl; // MEMBER is given in template
или что-то в этом роде.
Вы можете передать указатель на метод геттера вместо переменной-члена. –
Переменная 'memberPtr' в вашей функции' test' уже делает то, что вы хотите - указатели на функции-члены - это значения времени выполнения. – Griwes
Я понимаю, что я, возможно, неправильно понял, что мой указатель memberPtr действительно ... это определяется во время компиляции или во время выполнения? Есть ли какая-либо стоимость для использования (a. * MEMBER) по сравнению с просто ссылкой «a.type»? – StormRider