C ++模板int和字符串

时间:2014-10-28 00:25:55

标签: c++ templates types

#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的例子。

1 个答案:

答案 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()