Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取指向字符串上专用模板函数的指针?_C++_Visual C++_Templates_Function Pointers - Fatal编程技术网

C++ 如何获取指向字符串上专用模板函数的指针?

C++ 如何获取指向字符串上专用模板函数的指针?,c++,visual-c++,templates,function-pointers,C++,Visual C++,Templates,Function Pointers,我尝试使用一组过滤器函数来运行基于字符串输入的适当例程。我尝试使用模板为常见情况创建matcher函数,但在尝试存储指向专用函数的指针(在结构中,在实际应用程序中)时,出现了“类型不等于类型”错误 从Visual C++ 8’控制台应用程序的中提取示例 template <const char *C> const char* f(void) { return C; } const char* (*g)(void) = f<"hi">; int _tmain(in

我尝试使用一组过滤器函数来运行基于字符串输入的适当例程。我尝试使用模板为常见情况创建matcher函数,但在尝试存储指向专用函数的指针(在结构中,在实际应用程序中)时,出现了“类型不等于类型”错误

从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();
}
(它在主返回值上也有一个错误,但这与我无关。)


如果将
const char*
替换为int,则相同的示例成功。

ISO标准禁止字符串作为模板值参数。

其他信息:模板值参数必须是内置的整数类型。@Bond先生:但指针是整数类型。字符串文字的问题在于,驻留在不同编译单元中的两个等效字符串可能具有不同的地址,从而创建了两个不同的模板实例化。指针是标量类型,但不是整型。它们只是允许的另一种形式的参数。引用也可以作为模板参数和成员指针。它们不是。如果你声明了一个带有外部链接的数组,你可以将它传递给该模板。你是否意识到你可以通过执行char gs[]=“hi”来编译它;常量字符*(*g)(void)=f;确实找到了使用命名变量的引用,但这会破坏我想要的简明表;最好将字符串添加到表中并将其传递给函数。事实上,我只是用了一个if/else链。
Error   1   error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)'    c:\files\pointer.cpp    7