1

std::bind在 MSDN 研究什么是什么以及它的用途(这最终可能是一个不同的问题):http: //msdn.microsoft.com/en-us/library/bb982702.aspx

并看到列出的原型是:

template<class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);
template<class Ret, class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);

这让我感到困惑有两个原因。1)最后我检查,MSVC 没有实现可变参数模板,2)我的问题:这个词是什么unspecified意思?(它似乎与未指定的行为无关。)

4

3 回答 3

1

返回类型中的未指定意味着它是一个未指定的类型。该标准不要求从 中返回特定类型bind,只要返回的类型符合标准要求的要求即可。

截至...,我不知道 VS 是否实现了它们,但你会看到相同的文档boost::bind,并且它已经在不同的编译器中编译,而没有可变参数模板支持已经有一段时间了......文档指出你可以传递N不同类型的参数,但这并不一定意味着只有一个模板可以做到这一点,它可以根据一组 1 元、2 元... N 元模板来实现。

该文档显示了您可以预期使用它的行为,而不是它如何实现的细节。

于 2011-10-28T22:16:53.460 回答
1

有单独的重载需要 {1, 2, ..., N } 参数。文档没有将它们全部列出,而是使用速记来表明您可以使用各种数量的参数。它并不是为了说明有效的 C++ 语法。我希望文档在某处提到N是什么。

结果类型取决于传入的参数。它将是某种形式的函子,并且该函子通常可以存储在function对象中,或者您可以将结果直接传递给类似的东西for_each,让编译器的模板类型推导计算出来。只要结果是可调用的,实际类型无关紧要,尝试在文档中简要解释会很复杂。

于 2011-10-28T22:22:02.920 回答
1

Visual Studio 不实现可变参数模板。他们通过本质上具有大量函数重载(可能通过宏构建)来模拟这个概念。这是如何boost::bind实现的,这是std::bind从哪里来的。

unspecified返回类型std::bind正是如此。它必须是可移动类型的对象。该对象将重载operator(),以便std::bind可以调用绑定的函数。

于 2011-10-28T22:22:25.293 回答