下面的代码段之间是否存在明显的性能差异?
在最上面的代码中,我创建了一个结构并在该结构中提供了模板化功能
在下面的代码中,我创建了一个模板化的结构,该函数具有未模板化的相同功能
struct butterworth {
template<class T>
void fun1(T cool){cout << "fun1 called" << cool << endl;};
};
int main(){
butterworth instance1;
instance1.fun1<int>(9);
return 0;
}
和
template<class T>
struct butterworth {
void fun1(T cool){cout << "fun1 called" << cool << endl;};
};
int main(){
butterworth<int> instance1;
instance1.fun1(9);
return 0;
}
答案 0 :(得分:1)
您的两个类对两个完全不同的情况进行建模,因此,性能不应该使您选择其中任何一个。
我找不到更好的例子,所以请忍受...我将使用您的代码并简单地重命名一些东西。
第一种情况对可以处理其他各种类型的一种类型的实体进行建模:
struct zoo {
template <typename animal>
void add_animal(animal);
};
同一个zoo
可以容纳各种动物。 zoo
的不同实例都是同一类型,即使它们在运行时处理不同类型的动物也是如此。
第二种情况不同。它为不同类型的实体建模,其中每种类型只能处理一种特定的其他类型。
template <typename animal>
struct cage {
void add_animal(animal);
};
在这里,cage<elephant>
与cage<fish>
是不同的类型(我警告过,这不是最好的例子)。它们是完全无关的类型,没有任何共同点(除了鸭子以外,因为鸭子类型无论如何都会绕过类型系统)。您不能将fish
放在笼子里放大象,反之亦然。每个cage
实例只有一种添加只接受一种动物的动物的方法。