假设,我们声明模板:
template <class functor, int index>
class MyClass
{
public:
MyClass(){someFunction(index);}
private:
void someFunction(int index)
{
while(index--)
functor();
}
int commonFunction(void)
{
return M_PI;
}
};
请注意,commonFunction 方法不依赖于模板参数。
客户使用此模板:
MyClass<func1,100> t1;
MyClass<func2,100> t2;
// ...
MyClass<funci,100> ti;
// where i, for example in 1 .. 1000
模板的实例化会导致二进制代码中commonFunction的重复吗?
编译器可以防止这种重复吗?
C++ 标准是否定义了可以防止重复,所以每个编译器都应该提供优化?
当然,这可以通过在基类中为所有模板实现通用功能并在模板类中移动差异来轻松解决,如下所示:
class baseMyClass
{
int commonFunction(void)
{
return M_PI;
}
};
template <class functor, int index>
class MyClass : private baseMyClass
{
public:
MyClass(){someFunction(index);}
private:
void someFunction(int index)
{
while(index--)
functor();
}
};
但我的问题的目的是找出:
标准是否定义了在看起来像我给出的优化的情况下应该执行,所以我们可以简单地使用模板并依赖编译器?