ani*_*nio 3 c++ templates specialization
所以我有一个模板化的类,当我有特定的类型时,我想重载一个函数的行为,比如说char.对于所有其他类型,让他们做自己的事情.但是,c ++不会让我重载该函数.
为什么我不能重载这个功能?我真的不想做模板专业化,因为那时我已经复制了整个班级.
这是一个展示问题的玩具示例:http://codepad.org/eTgLG932
这里贴出相同的代码供您阅读:
#include <iostream>
#include <cstdlib>
#include <string>
struct Bar
{
std::string blah() { return "blah"; }
};
template <typename T>
struct Foo
{
public:
std::string doX()
{
return m_getY(my_t);
}
private:
std::string m_getY(char* p_msg)
{
return std::string(p_msg);
}
std::string m_getY(T* p_msg)
{
return p_msg->blah();
}
T my_t;
};
int main(int, char**)
{
Foo<char> x;
Foo<Bar> y;
std::cout << "x " << x.doX() << std::endl;
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家的建议.提出了两种有效的解决方案.我可以专门化doX方法,或者专门化m_getY()方法.
在一天结束时,我宁愿保持我的专业而不是公开,所以我接受了Krill的回答.
您可以在特定类型的整个模板类中专门设计一个函数,而无需专门化整个类.它看起来像这样:
template <> void Foo<char>::doX() {
/* custom implementation here */
}
Run Code Online (Sandbox Code Playgroud)
你很少在实践中看到这一点,但这是完全合法的C++代码.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |