c++ - 类/结构内外的模板参数
问题描述
下面的代码段之间是否存在显着的性能差异?
在最上面的代码中,我创建了一个结构并在结构中提供了一个模板化函数
在底部的代码中,我创建了一个模板结构,它具有相同的功能,但没有模板化
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;
}
解决方案
你的两个类模拟了两种完全不同的情况,因此让你选择其中任何一种的不是性能。
我找不到更好的例子,所以请耐心等待......我将使用您的代码并简单地重命名一些东西。
第一种情况对可以处理各种其他类型的一种类型的实体进行建模:
struct zoo {
template <typename animal>
void add_animal(animal);
};
同样zoo
可以容纳各种动物。的不同实例zoo
都是同一类型,即使在运行时它们处理不同类型的动物。
第二种情况不同。它对不同类型的实体进行建模,其中每种类型只能处理一种特定的其他类型。
template <typename animal>
struct cage {
void add_animal(animal);
};
在这里, acage<elephant>
是一种不同的类型cage<fish>
(我警告过你,它不是最好的例子)。它们是完全不相关的类型,没有任何共同点(鸭子除外,因为鸭子类型无论如何都会绕过类型系统)。你不能把fish
大象放在笼子里,反之亦然。每个cage
实例只有一个方法来添加只接受一种动物的动物。
推荐阅读
- java - 使用JPA注释相互继承的抽象类的正确方法是什么?
- autodesk-forge - 查看器中的 IFC 几何图形不正确
- javascript - 如何使用 jQuery 或 JavaScript 从 html 输入的开头和结尾修剪特殊字符?
- python - 在列表中查找数字的第 n 位
- php - 在 PHP 中如何在同一台机器上找到 USB 设备的地址?
- python - Web2py - Oracle 连接失败
- python - Python:解析字符串时如何忽略特殊字符
- servicenow - 从服务目录订购商品时,如何获取服务中的变量值?
- javascript - 克服ajax页面刷新
- c# - 强制应用程序winform c#的一个实例