Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++_Templates_C++11 - Fatal编程技术网

C++ '的模板参数推导;字符*';

C++ '的模板参数推导;字符*';,c++,templates,c++11,C++,Templates,C++11,我有以下功能(仅用于复制问题): 模板 无效函数(常数键cptr){ 标准::cout < P>我期待代码> TAD< /Cord>将PARAM类型视为conchar *… 这里如何推导参数类型 这里没有推论:您已经明确声明模板参数是char* 您缺少的是参数替换不是文本搜索和替换:它实际上遵循类型系统的逻辑规则。const-KeyT-cptr声明类型KeyT的const实例-当KeyT为char*时,参数声明变为char*const-cptrcptr最后是指向char的常量指针(char*co

我有以下功能(仅用于复制问题):

模板
无效函数(常数键cptr){
标准::cout
< P>我期待代码> TAD< /Cord>将PARAM类型视为conchar *…
这里如何推导参数类型

这里没有推论:您已经明确声明模板参数是
char*


您缺少的是参数替换不是文本搜索和替换:它实际上遵循类型系统的逻辑规则。
const-KeyT-cptr
声明类型
KeyT
const
实例-当
KeyT
char*
时,参数声明变为
char*const-cptr

cptr
最后是指向char的常量指针(
char*const
),而不是指向const char的指针。@melpomene这是怎么结束的呢?你的声明说
cptr
必须是
const
,你用
char*
实例化
KeyT
。所以
cptr
是常量KeyT(带KeyT=指向字符的指针).
为什么需要将模板参数类型设置为char*?要在函数中修改它?
。不,这只是我展示的一个示例。我实际上使用了
char*
作为一些自制容器的键类型,该容器将提供的文本复制到容器数据结构中。我想不使用
进行尝试>删除_const
/
decait
traits.@Arunmu如果你不修改它,使用
const char*
就可以了(将模板参数指定为
const char*
或者根本不指定)。如果没有,你必须做一些与我的答案类似的事情。是的,这就是它的样子。我可能需要重新考虑我的界面。
template <typename KeyT>
void func(const KeyT cptr) {
  std::cout << typeid(KeyT).name() << std::endl;
}
func<char*>("literal");
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wc++11-compat-deprecated-writable-strings]
template <typename KeyT>
void func(const KeyT cptr)
char my_chararray[] = "literal";
func<char*>(my_chararray); // or just func(my_chararray);