小编Dow*_*nie的帖子

C++模板编程 - 延迟函数调用

我正在寻找一个优雅的解决方案来解决以下问题.我有一个用于延迟函数调用的任务结构.

template <typename T> struct Task1
{
    T Arg1;
    Delegate<T> TaskDelegate;
};
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:

Task1<const Foo&> MyTask;
Run Code Online (Sandbox Code Playgroud)

这将导致参数保持为const引用.有没有人知道一个很好的解决方案来绕过这个?我可以强制执行规则,例如委托签名总是采用const和params,但这似乎是限制性的.我总是可以有两个任务结构(一个用于ref,一个用于值)但这看起来很讨厌.

另一种解决方案是创建以下内容:

template <typename T1, typename T2> struct Task1
{
    T2 Arg1;
    Delegate<T1> TaskDelegate;
};
Run Code Online (Sandbox Code Playgroud)

无论如何,默认T2与T1的类型相同吗?这样,每当我有方法值签名时,我都不需要额外的模板参数.

编辑:该模板用于多线程任务调度程序.这是一个例子:

void MyClass::Populate(const std::string& instrText);

CTaskScheduler::Schedule(Task1<const std::string&>(this, &MyClass::Popluate, "MyString"));
Run Code Online (Sandbox Code Playgroud)

c++ templates reference

4
推荐指数
1
解决办法
1379
查看次数

标签 统计

c++ ×1

reference ×1

templates ×1