【发布时间】:2011-11-13 18:21:15
【问题描述】:
好的,我正在使用 Visual Studio 2010 来处理模板中的 lambda。 VC++ 处理模板参数有一个奇怪的怪癖,但我找到了一种解决方法,可以使用 auto 关键字调用模板参数的静态函数(本例中为 T::magic)。但是,我遇到了另一个问题。
假设我有许多具有“魔术”功能的类之一,只有前 2 个参数对我以后的调用很重要。在前 2 个之后,它可能有也可能没有一些默认参数。对于这个应用程序,我并不真正关心它们,我只需要调用 magic(start,otherthing)。 Uhoh 是这些类之一:
struct Uhoh
{
static int magic(char* start, int otherthing, bool doom = false);
}
我使用此模板进行通话。我必须使用使用 auto 类型的解决方法来获取 T::magic 才能在 lambda 函数中工作。
template<typename T> void example()
{
auto themagic = T::magic;
std::function<int (char*)> test = [=](char* start) -> int
{
return themagic(start, 0);
};
test(0);
}
然后我就叫它什么的。
int main()
{
example<Uhoh>();
}
我收到一个关于“调用的参数太少”的错误,即使“魔术”可以接受两个参数。现在,我无法确定在任何各种“魔术”功能中“其他”的类型是什么。我所知道的是 0 将是一个有效值。将任何其他内容的类型传递给函数“example”充其量只是一个极端的烦恼。
我怎样才能正确输入“themagic”以使 VC++ 不会抛出错误?
【问题讨论】: