基本上,我需要在构造函数之外设置一个变量,并使其可供整个类访问。
它需要像这样工作:
#include <iostream>
#include <string>
template <typename MT>
class CallbackFunction
{
void (*func)(MT);
MT *data;
public:
void SetCallbackData (void (*f)(MT), MT *d)
{
func = f;
data = d;
}
void Call()
{
func(data);
}
};
class Callback
{
public:
template <typename T>
void SetCallback(CallbackFunction <T> *func)
{
// Need to make this a class member;
CallbackFunction <T> *CallbackClass = func;
}
void Call()
{
CallbackClass->Call();
}
};
template <typename CT>
Callback *NewCallback(void (*func)(CT), CT *data)
{
Callback *cb;
CallbackFunction <CT> *cf;
cf->SetCallbackData(func, data);
cb->SetCallback <CT> (cf);
return cb;
};
void Call(Callback *CallbackFunc)
{
CallbackFunc->Call();
}
void foo(std::string str)
{
std::cout << str << "\n";
}
int main()
{
std::string *str;
str->append("Hello, World!");
Call( NewCallback(foo, str) );
return 0;
}
更多细节:
我知道它有问题,并且无法编译,当我找到解决问题的方法时,我会整理这些错误。这是:
我需要找到一种在“回调”类的成员函数中声明模板变量的方法。我需要这样做,因为“回调”类不能是模板,它需要保持一个简单的类。因此,因为“回调”类不是模板,所以我需要将其中一个成员函数设为模板。因此,该成员函数可以在调用该函数时声明一个定义类型的变量(使用模板),并且该变量需要可供整个类访问。
所以在一个不错的列表中:
- “回调”类不能是模板,
- 变量 CallbackClass 必须可供整个类访问,但仍保留在类内部。