Передача шаблонных функций в качестве указателя на функцию

#include<iostream>

template<typename T>
class testClass {
public:
T a;
};

template<typename T>
void testFunc( void *a ) {
testClass<T> *tempClass = reinterpret_cast<testClass<T> *>(a);
tempClass->a++;
}

int main() {
void (*foo)(void *);
foo = testFunc<int>;
testClass<int> a;
a.a = 100;
std::cerr << "Before = " << a.a << "\n";
foo(&a);
std::cerr << "After = " << a.a << "\n";
return 0;
}

Может ли этот шаблон работать testFunc передаваться как указатель на функцию C безопасно? Мне не ясно, как C ++ может назначить правильный адрес памяти для указателя функции. Путаница заключается в том, что я не смог скомпилировать тот же код, в котором я передаю функцию-член класса в качестве аргумента указателя на функцию.

0

Решение

Суть методов в том, что для доступа к указателю на метод компилятор попросит вас предоставить объект, вызывающий этот метод, для автоматического заполнения this член при доступе к методу.

Здесь вы упомянули простой указатель на функцию, поэтому вам не нужно указывать какой-либо объект, так что да, вы можете предположить, что это безопасно.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]