基本上,我需要在构造函数之外设置一个变量,并使其可供整个类访问。在构造函数外创建变量类成员
它需要工作是这样的:
#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;
}
更多细节:
我知道这是马车,它不能编译,我将挑选出这些错误,当我找到一个解决我的问题。它是:
我需要找到一种方法来声明类“回调”类的成员函数内的模板变量。我需要这样做,因为类“回调”不能作为模板,它需要保持简单的类。因此,因为“Callback”类不是模板,所以我需要将它的一个成员函数作为模板。因此,该成员函数可以在调用该函数时声明一个定义类型的变量(使用模板),并且此变量需要可供整个类访问。
因此,在一个漂亮的列表:
- 类“回调”不能是一个模板,
- 变量CallbackClass必须能够访问到整个班级, 但仍类的内部。
好的,你可以重复一遍为什么你不能达到你想要的,你到底想要什么。你想让CallbackClass成为一个类成员吗?为什么它不能成为班级成员?因为回调类也必须模板化,或者由于其他问题? – ondrejdee
@thephpdev你可以更准确地确定你想要解决什么问题吗?你目前的解释不清楚,所提供的代码没有澄清任何事情。注意你是代码示例,因为它访问未初始化的指针。 – greatwolf
我知道它是越野车,当我找到解决我的问题的解决方案时,我会理清这些错误。这是: 我需要找到一种方法来声明类“成员函数的回调”中的模板变量。我需要这样做,因为类“回调”不能作为模板,它需要保持简单的类。因此,因为“Callback”类不是模板,所以我需要将它的一个成员函数作为模板。因此,该成员函数可以在调用该函数时声明一个定义类型的变量(使用模板),并且此变量需要可供整个类访问。 – thephpdev