定义模板类的方法

defining methods for template class

本文关键字:方法 定义      更新时间:2023-10-16

我想实现这样的目标:

template <class that, class has, class much, class genericizem>
class Generic{
// using all template stuff
     Generic &method(Generic &gen1, Generic &gen2);
};
// what I assume is the solution from vage things I've read
template <class that, class has, class much, class genericizem>
    using Gen = Generic<that,has,much,genericizem>;
// and no one wants to see the naive way of writing it.
Gen &Gen::method(Gen &gen1, Gen &gen2){
    return gen1;
}

我知道你不能模板化命名空间,所以我只是写很长的路吗?

如果我正确理解你的问题,你想要的,不能像你尝试的那样完成。即使您的using Gen = ...有效,您仍然需要编写:

template <class that, class has, class much, class genericizem>
Gen<that,has,much,genericizem> &Gen<that,has,much,genericizem>::method(Gen &gen1, Gen &gen2){

因为Gen是模板别名,所以实际上与原始Genric相当。

您的成员函数可以定义为:

template <class that, class has, class much, class genericizem>
auto Generic<that,has,much,genericizem>::method(Generic &gen1, Generic &gen2) -> Generic&
{
    /* ... */
}

你不需要每次引用Generic时都重复所有的模板参数,因为一个普通的Generic代表要实例化的类。这称为注入的类名

但请注意,从语法上讲,返回类型不在类范围内,因此不能在那里使用注入的类名。相反,您可以使用auto和尾随返回类型。