C ++ - 如何在不多次定义模板的情况下实现模板类的多个功能?

时间:2013-02-03 07:38:28

标签: c++ templates

我想知道是否可以在不多次定义模板的情况下实现模板类的多个功能。

声明:

template <class T>
class Test{
    private:
    T field;
    public:
    Test(T value);
    T& get();
    void set(T value);
};

实现:

template <class T> Test<T>::Test(T value){ set(value); }
template <class T> T& Test<T>::get(){ return field; }
template <class T> void Test<T>::set(T value){ field = value; }

多次复制template <class T>有点容易出错。我想知道我是否可以这样做:

template <class T>{
Test<T>::Test(T value){ set(value); }
T& Test<T>::get(){ return field; }
void Test<T>::set(T value){ field = value; }
}

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您不将其与班级分开,则不必每次都指定template<class T>

答案 1 :(得分:2)

您可以在类定义中直接实现这些方法。

此外,您不需要分离模板类的声明和实现。它对编译没有副作用。因为实现不是真正的实现。模板类不是类,它只是一个可用于创建类的模板。实例化这样的模板类时,例如 YourTemplate ,编译器创建该新类。为了创建它,它必须查看所有模板化的成员函数(以便它可以使用模板来创建实际的成员函数,例如 YourTemplate :: function1()),因此这些模板成员函数必须与头文件一起,以及模板类主体。