一,模板如下:
#pragma once #include<cstdio> template<typename T1> class TestSpecializeBug { public: TestSpecializeBug() { printf("基础模板\n"); } void Func() { //这一行是导致问题的原因 TestSpecializeBug<int*> ot1; //Flag } }; template<typename T1> class TestSpecializeBug<T1*> { public: TestSpecializeBug() { printf("特化版本\n"); } };二,调用测试
int main() { TestSpecializeBug<int*> tps; }三,输出结果
四,结论
Func函数的Flag标记行是导致问题的原因,如果注释掉这行,则main函数中的TestSpecializeBug<int*> tps语句将会匹配到偏特化的版本,输出:特化版本
C++模板特化的一个BUG?
于 2022-03-25 11:33:58 首次发布
本文通过一个具体的C++模板特化示例,展示了当在模板类的一个成员函数中实例化特化版本时可能出现的问题。通过对比注释掉特定行前后程序的行为变化,揭示了问题的本质原因,并给出了清晰的解决方案。

1047

被折叠的 条评论
为什么被折叠?



