template <typename T>
class MyClass
{
public:
T Foo();
T val;
//other functionality and data
};
//handles all types
template <typename T>
T MyClass<T>::Foo()
{
return val;
}
//handles a special type in a different way
template <>
float MyClass<float>::Foo()
{
return val + 5.0f;
}
int main() {
MyClass<int> mi;
MyClass<float> mf;
mi.Foo();
mf.Foo();
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIE15Q2xhc3MKewpwdWJsaWM6CiAgVCBGb28oKTsKICBUIHZhbDsKCiAgLy9vdGhlciBmdW5jdGlvbmFsaXR5IGFuZCBkYXRhCn07CgogIC8vaGFuZGxlcyBhbGwgdHlwZXMKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgTXlDbGFzczxUPjo6Rm9vKCkKewogIHJldHVybiB2YWw7Cn0KCiAgLy9oYW5kbGVzIGEgc3BlY2lhbCB0eXBlIGluIGEgZGlmZmVyZW50IHdheQp0ZW1wbGF0ZSA8PgpmbG9hdCBNeUNsYXNzPGZsb2F0Pjo6Rm9vKCkKewogIHJldHVybiB2YWwgKyA1LjBmOwp9CgppbnQgbWFpbigpIHsKICBNeUNsYXNzPGludD4gbWk7CiAgTXlDbGFzczxmbG9hdD4gbWY7CiAgbWkuRm9vKCk7CiAgbWYuRm9vKCk7Cn0=