首页 > 解决方案 > 类/结构内外的模板参数

问题描述

下面的代码段之间是否存在显着的性能差异?

在最上面的代码中,我创建了一个结构并在结构中提供了一个模板化函数

在底部的代码中,我创建了一个模板结构,它具有相同的功能,但没有模板化

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;
}

标签: c++

解决方案


你的两个类模拟了两种完全不同的情况,因此让你选择其中任何一种的不是性能。

我找不到更好的例子,所以请耐心等待......我将使用您的代码并简单地重命名一些东西。

第一种情况对可以处理各种其他类型的一种类型的实体进行建模:

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实例只有一个方法来添加只接受一种动物的动物。


推荐阅读