Как можно сохранить класс из шаблона, не делая весь класс шаблоном?Шаблон и указатель функции
Задача:
У меня есть две функции, v1 без параметров и v2 с параметрами, Если v1 называли где-то ничего не происходит с использованием(), если v2 называлась где-то использовать() должен выполнить function_ptr с Я получил от DoSometh (T *).
например.
class MyClass
{
//v1 no parameters
void DoSomething()
{
}
//v2 with parameter
template<class T>
void DoSomething(T* instance, void (T::*func)())
{
store somewhere?? = instance;
}
void Use()
{
//if DoSometh(T* instance) was used before
if(instance != NULL)
{
(*instance->)//call function pointer from DoSomething(T*,void (T::*)())
}
}
}
std::function problem
update:
class Timer : public ITickable
{
std::function<void()> test; //adding this does weird things
virtual void Tick() {}
}
class MyClass
{
ITickable* tickable_;
void Tick()
{
tickable_->Tick(); //let's assume it points to a Timer obj.
}
}
ли вы * есть * использовать указатели на функции? Не можете ли вы использовать шаблоны, подобные стандартной библиотеке, для всех своих вызываемых функций? Затем вы можете передать объект 'std :: function', общие объекты-функции, объекты std :: bind, обычные указатели функций (или статические элементы) и lambdas, все, не беспокоясь о случаях или сохраняя информацию. –
'void *' или, еще лучше - 'ParentInterface *' – Amartel
Показать пример примера использования. Похоже, что может быть лучшее решение в целом. –