c++ - 为什么这个程序的输出不符合预期
问题描述
我将指针模板与通用模板分开,但输出不是应有的。
template <class T>
class Test
{
private:
T pvalue;
public:
Test(T invalue)
{
pvalue = invalue;
}
void display()
{
std::cout << pvalue << "\n" ;
}
};
template <class T>
class Test<T*>
{
private:
T pvalue;
public:
Test(T invalue)
{
pvalue = new T(*invalue);
}
void display()
{
std::cout << pvalue << "\n" ;
}
~Test()
{
delete pvalue;
}
};
int main()
{
Test<int> testint(4);
testint.display();
char * temp = new char[10];
sprintf(temp, "%s", "Rahil");
Test<char*> testchar(temp);
}
输出为:4 R
解决方案
只需为 char * 添加完整的专业化,如下所示:
template <>
Test<char*>::Test(char * invalue)
{
int len = 0;
while(invalue[len] != '\0')
{
len++;
}
pvalue = new char[++len];
for(int cnt = 0; cnt < len; cnt++)
{
pvalue[cnt] = invalue[cnt];
}
};
template<>
Test<char*>::~Test()
{
delete[] pvalue;
}
推荐阅读
- python-3.x - 比较两个字典并仅在所有键、值匹配时才返回
- javascript - 我无法在 Patatap 克隆中单独播放音乐
- modelica - 如何在 Dymola 中获得结构雅可比行列式?
- android - 安装后找不到GENYMOTION路径(windows,Android Studio 4.0.1)
- database - 用于保存和查询股票价格的数据库选择
- python - 错误 conda.core.link:_execute(698):安装包“defaults::icu-58.2-ha925a31_3”时出错
- javascript - 热模块重新加载后断点未命中
- python - 如何设置python窗口中心位置
- ruby - 使用 splat: SyntaxError: unexpected '\n', Expecting '.' 或者 &。或 :: 或 '['
- python - 在循环中连接数据帧非常慢