类/结构内部和外部的模板参数

时间:2018-12-13 17:04:19

标签: 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;
}

1 个答案:

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