gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:11 24 4
gpt4 key购买 nike

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

template <typename T> struct Task1
{
T Arg1;
Delegate<T> TaskDelegate;
};

我遇到的问题是:

Task1<const Foo&> MyTask;

这将导致参数被保存为常量引用。有谁知道一个很好的解决方案来解决这个问题?我可以强制执行诸如委托(delegate)签名始终采用 const& 参数之类的规则,但这似乎具有限制性。我总是可以有两个任务结构(一个用于引用,一个用于值),但这看起来很讨厌。

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

template <typename T1, typename T2> struct Task1
{
T2 Arg1;
Delegate<T1> TaskDelegate;
};

是否可以将 T2 默认为与 T1 相同的类型?这样,只要我有一个方法值签名,我就不需要额外的模板参数。

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

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

CTaskScheduler::Schedule(Task1<const std::string&>(this, &MyClass::Popluate, "MyString"));

最佳答案

你可以看看 function<> 的实现无论是提升还是即将推出的标准。事实上,您可以使用 function<> .我认为解决方案(在 C++0x 之前)始终存储参数的拷贝,如果用户想要引用语义,他们可以使用引用包装器

至于如何得到一个值,你可以看看一些简单的元函数来删除const& :

// Remove reference:
template <typename T>
struct remove_reference {
typedef T type;
};
template <typename T>
struct remove_reference<T&> {
typedef T type;
};

同样适用于 const .

关于C++ 模板编程 - 延迟函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7124614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com