【问题标题】:how to call methods of defined classes from within template class methods如何从模板类方法中调用已定义类的方法
【发布时间】:2011-06-06 23:48:35
【问题描述】:

我应该如何从模板类方法调用已定义类中的方法? 以下是我的场景-

  1. 模板类

    template <class T>
    class TC {
        void myTemplateMethod() {
            T.myMethod();  //can I call like this ?
        }
    }; 
    
  2. 定义类

    class tdef {
        void myMethod() { 
            //does something
        }
    };
    
  3. 主要

    int main()  {
        TC<tdef> tobj;
        tobj.myTemplateMethod(); //can I call tdef.myMethod() like this?
    }
    

请注意,我已经调试过这样的代码,发现 tdef.myMethod() 在这样调用时不起作用。在 Template 类方法中调用 tdef.myMethod() 时是否有可能未处理某些异常?

-索姆纳特

【问题讨论】:

  • 没有tdef.myMethod() 这样的东西。 tdef 是类名,而不是对象,. 成员访问运算符需要一个对象。

标签: c++ templates


【解决方案1】:

这是一个非静态成员函数,所以只能在实例上调用。模板不会改变这一事实。

T t;
t.myMethod();

或者如果函数是静态的:

T::myMethod();

【讨论】:

  • 但是我正在创建模板类的实例,因此编译器应该明白 myMethod() 是通过实例调用的。不是这样吗?
  • @somnath: myMethodtdef 类的一部分,因此它需要tdef 的实例(Ttdef,在TC&lt;tdef&gt;::myTemplateMethod() 内部)。你有一个TC&lt;tdef&gt; 的实例,你需要一个tdef 的实例。
  • 好吧,它只适用于静态函数。非常感谢您的 cmets。
  • 是的,这意味着任何静态类方法只能从模板类调用
  • @somnath:如果你有一个T(不是TC&lt;T&gt;)的实例,你可以使用它的非静态成员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2011-06-11
  • 2011-05-18
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多