缩小模板代码C++样板代码

minifying boilerplate code on C++ template code

本文关键字:代码 C++ 缩小      更新时间:2023-10-16

假设我有这样的代码:

template <class T>
class Something{
public:
    int func1();
    int func2();
    T   t;
    int n = 0;
};
template <class T>
int Something<T>::func1(){
   return t.value() * n;
}
template <class T>
int Something<T>::func2(){
   return n;
}

在这种情况下Something::func2()并不真正依赖于模板参数 T,因此它可以编译到目标文件中,而不是每次都重新编译(这取决于编译器,可以是也可能不是真的)。

其次,您仍然需要键入 template <class T> int Something<T>::func2() .

有没有办法简化样板代码?

在这种情况下,Something::func2() 并不真正依赖于模板 参数 T,因此可以将其编译到目标文件中,而不是 每次重新编译(这依赖于编译器,可以或不能 是真的)。

func2 是一种类方法,由于 Something<int>Something<double> 是两个不同的类,因此应该编译它们的代码。

你可以做的是从类中提取方法,到一个单独的方法或基类,但总的来说,我认为你不应该这样做。

面向

对象编程在这里为您提供帮助!使Something<T>继承自未寺庙化的类SomethingBase

#include <iostream>
struct SomethingBase
{
    int un_templatized();
};
int SomethingBase::un_templatized()
{
    return 42;
}
template <class T>
struct Something : SomethingBase
{
    T templetized(T t)
    {
        return t;
    }
};
int main()
{
    Something<double> s;
    std::cout << s.un_templatized() << std::endl;
    std::cout << s.templetized(3.14) << std::endl;
}

演示