【问题标题】:Using methods with a Template使用带有模板的方法
【发布时间】:2017-08-17 14:26:44
【问题描述】:

我对 C++ 很陌生,所以想知道你们是否可以帮助我。

我正在浏览一段代码,并在模板下看到了一个函数,如下所示:

MyClass(xyzType param1, xyzType param2)
  parameter1 (param1)
 ,parameter2 (param2)
{
    myMethod<ExternalLogicClass>(paramter1, parameter2);

    template<class TemplateClass>
    void MyClass::myMethod(xyzType parameter1, xyzType parameter2)
    {
        xyzType var = xyzObject->createSomething(new TemplateClass(parameter1), parameter2);
    }
};

我的问题是,为什么有人会这样做? myMethod 很可能在没有模板的情况下创建。使用带有模板的函数是否有优势,如果是,那么优势是什么?还有什么时候应该用,什么时候不应该用?

任何帮助表示赞赏.. 谢谢你

【问题讨论】:

  • 啊,是的..我会纠正它..谢谢
  • 有时我将这个方案用于调试功能。因为模板仅在使用时才被实例化我将调试功能作为模板并使用它们临时。这样我就不会给自己的班级增加额外的负担。
  • @ShehrozAlam 我无法想象它会,new TemplateClass(parameter1) 将如何编译? TemplateClass 也是类型名吗?
  • @ShehrozAlam 这就是为什么minimal reproducible example 值一千字的原因。

标签: c++ c++11 templates methods


【解决方案1】:

正如发布的,myMethod 不使用MyClass 的任何成员数据。它可以作为非成员函数模板实现。

template<class TemplateClass>
void myMethod(xyzType parameter1, xyzType parameter2)
{
    xyzType var = xyzObject->createSomething(new TemplateClass(parameter1), parameter2);
}

但是,如果 myMethod 依赖于 MyClass 的某些状态,则将其作为模板成员函数是有意义的。

MyClass
{
    int myData;

    template<class TemplateClass>
    void myMethod(xyzType parameter1, xyzType parameter2)
    {
        xyzType var = xyzObject->createSomething(new TemplateClass(parameter1),
                                                 parameter2,
                                                 myData); // Member data.
    }
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2019-09-06
    • 2021-05-24
    相关资源
    最近更新 更多