2

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

宣言:

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; }
}

任何帮助,将不胜感激。

4

2 回答 2

3

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

于 2013-02-03T07:40:34.167 回答
2

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

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

于 2013-02-03T07:47:33.470 回答