【发布时间】:2009-06-26 20:06:12
【问题描述】:
我尝试使用一组过滤器函数来根据字符串输入运行适当的例程。我尝试使用模板为常见情况创建匹配器函数,但是当我尝试存储指向专用函数的指针时出现“类型不等于类型”错误(在结构中,在实际应用程序中)
从 Visual C++ 8“控制台应用程序”中提取的示例
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
这会失败并出现错误
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
(它在主返回值上也有错误,但这与我无关。)
如果将const char * 替换为int,则相同的示例会成功。
【问题讨论】:
-
你知道你可以通过 char gs[] = "hi"; 编译它吗? const char* (*g)(void) = f
; -
确实找到了使用命名变量的参考,但这会破坏我想要的简洁表;最好将字符串添加到表中并将其传递给函数。实际上,我只是下注并使用了 if/else 链。
标签: c++ visual-c++ templates function-pointers