【发布时间】:2020-01-26 06:29:13
【问题描述】:
我有一个类,它有一个模板函数
class DialogManager
{
public:
template<class T>
using TimeoutCallback = std::function<void (T)>;
DialogManager();
virtual ~DialogManager();
template<class T>
void SetTimeoutCallback(TimeoutCallback<T> callback);
int GetDialoge(T obj);
private:
TimeoutCallback mTimeoutCallback;
}
我得到以下错误:
错误:模板名称“DialogManager::TimeoutCallback”的使用无效 没有参数列表
我已将代码更改为
template<class T>
TimeoutCallback<T> mTimeoutCallback;
但我遇到了另一个编译器的错误
错误:数据成员“mTimeoutCallback”不能是成员模板
示例用法是
#include <DialogManager.h>
class foo()
{
public:
foo()
{
DialogManager* dialog = new DialogManager();
}
DialogManager* mDialogManager;
};
struct data
{
data() {}
};
int main()
{
Foo* f1 = new Foo();
auto a1 = f1->mDialogManager->GetDialoge(1);
auto b1 = f1->mDialogManager->GetDialoge("test");
Foo* f2 = new Foo();
data d;
auto a2 = f2->mDialogManager->GetDialoge(d);
auto b2 = f2->mDialogManager->GetDialoge(45.231);
return 0;
}
`
【问题讨论】:
-
您很可能希望
DialogManager成为类模板。从您的代码中删除行template<class T>并在列表的第一行之前添加一行template<class T>。如果您确定不希望这样,则需要在此处说明您的用例更好一些。
标签: c++ templates c++14 std-function