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

C++ C++;-如何在不多次定义模板的情况下实现模板类的多个功能?,c++,templates,C++,Templates,我想知道是否可以在不多次定义模板的情况下实现模板类的多个函数 声明: template <class T> class Test{ private: T field; public: Test(T value); T& get(); void set(T value); }; 模板 课堂测试{ 私人: T场; 公众: 试验(T值); T&get(); 无效集(T值); }; 实施: template <class T&

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

声明:

template <class T>
class Test{
    private:
    T field;
    public:
    Test(T value);
    T& get();
    void set(T value);
};
模板
课堂测试{
私人:
T场;
公众:
试验(T值);
T&get();
无效集(T值);
};
实施:

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; }
模板测试::测试(T值){set(值);}
模板T&Test::get(){return field;}
模板无效测试::设置(T值){field=value;}
多次复制
模板
有点容易出错。我想知道我是否可以做这样的事情:

template <class T>{
Test<T>::Test(T value){ set(value); }
T& Test<T>::get(){ return field; }
void Test<T>::set(T value){ field = value; }
}
模板{
Test::Test(T值){set(value);}
T&Test::get(){return field;}
无效测试::设置(T值){field=value;}
}

任何帮助都将不胜感激。

如果不将其与类分开,则不必每次都指定
模板。

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


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

实际上,我已经知道这一点。然而,合并声明和实现似乎是一种糟糕的做法。不管怎样,我给你一个+1。@ KonfleDolex,如果你认为它有缺点,那就由你来考虑不重复模板的缺点了。模板化类通常也是如此。@KonfleDolex这是一个很好的实践。因为您的实现可以内联,这会提高性能。@Arpit在任何一个好的编译器中内联都应该没有区别。将定义放在声明中是不好的做法,因为它会降低代码的可读性。如果函数都是一行程序,如果不是所有的函数都是一行程序,最好将声明和实现分开。顺便说一句,这家伙是对的。我用两段代码做了一个测试。一个合并了声明和实现,另一个将它们分开。生成的ASM代码相同。