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);