#include <string>
#include <iostream>
using namespace std;
template <class T>
class Tyler{
T first, second;
public:
Tyler(T a, T b)
{
first = a;
second = b;
}
int larger();
string larger();
};
template <class T>
int Tyler<int>::larger()
{
cout << "int larger" <<endl;
return(first>second?first:second);
}
template <class T>
string Tyler<string>::larger()
{
cout << "string larger" <<endl;
if(first.compare(second) > 0)
return(first);
return(second);
}
int main()
{
Tyler<int> tobj(7,77);
Tyler<string> tstr("Seven", "test");
cout << tobj.larger() <<endl;
cout << tstr.larger() <<endl;
}
我正在学习C ++(特别是模板)并试图理解。如果我想在下面创建两个函数并且“更大”函数将执行不同,具体取决于在main中实例化的类中指定的数据类型。我只看过使用int和float的例子。
答案 0 :(得分:0)
首先,您似乎正在尝试专门化该功能,因此您的声明不正确。你应该有这个声明。
T larger();
您希望每个Tyler
对象只有一个larger
函数,根据T
执行不同的操作。接下来,定义:
int Tyler<int>::larger()
在这里,您正在创建模板专业化。它是一个模板函数(好吧,有点),所以它确实需要它上面的template
位,但是这个专门化不需要模板参数,所以......
template<>
int Tyler<int>::larger()
为什么这有用?好吧,因为有时专业化可以有模板参数......
template<class T, class Allocator>
vector<T,Allocator> Tyler< vector<T,Allocator> >::larger()