基本上,我需要在構造函數之外設置一個變量,並使其可供整個類訪問。在構造函數外創建變量類成員
它需要工作是這樣的:
#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