【发布时间】:2017-04-22 12:19:14
【问题描述】:
我的任务是实现我自己的 std::ref 函数。我知道有一个reference_wrapper 函子,它有助于std::ref。但是我怎么能实现这些函数/类。我考虑以下几点:
template <class T>
struct myreference_wrapper{
T& functor;
myreference_wrapper(T& t):functor(t){}
void operator()('parameter') {
functor('parameter');
};
};
template<class T>
myreference_wrapper<T> myref(T& t){
myreference_wrapper<T> functor(t);
return functor;
}
当我们调用myref 时,不能使用模板参数,因为std::ref 不使用模板参数。但是当我们调用 operator() 时,我们需要知道它的参数,因为我们想将它们传递给仿函数的 operator()(我用 'parameter' 签名)。 std::ref 在没有任何模板参数的情况下如何做到这一点?
【问题讨论】:
-
您可以尝试将
myreference_wrapper专门用于Callable类型。 -
std::ref什么时候不用模板参数了? -
为什么要重新发明轮子而不使用
std::ref? -
嗯,检查 stl 中的某些内容是如何实现的最好方法是……阅读一些实现源。例如,在 Visual Studio 中写入 std::ref 并按 Alt + F12。
-
这是检查的好方法,@Caribou,但不是理解的好方法。 C++ 标准库实现文件通常极其复杂且难以理解。要求对 Stack Overflow 进行更清晰的解释并非没有道理。虽然,首先检查实现可能会发现,事实上,
std::ref确实 使用模板参数。 :-)