调用类方法instide模板类

时间:2017-10-31 16:16:31

标签: c++ templates

我对模板编程很新,我找不到任何相关的问题,抱歉,如果已经存在类似的问题。

我有我的模板类

    template<class T>
    class MyTemplate
    {
      public:
       virtual void set(const T& val) { value_ = val; }
       virtual T get() const { return value_; }
       // other stuff


      private:
       T value_;
    }

和自定义类

class Foo
{
   void bar();
}

然后我宣布一个变量

MyTemplate<Foo> var;

如何从 var 调用 bar()方法?

1 个答案:

答案 0 :(得分:1)

要调用bar(),你需要一个Foo的实例。如前所述,您可以使用继承。我看到这个问题已被编辑以添加这样的成员。您无法直接调用模板类型的成员。您可以在MyTemplate中添加一个包装器,例如'doBar()'。你也可以(虽然这不是一个好主意)通过公开它来揭露Foo成员。

#include <iostream>

template<class T>
class MyTemplate
{
public:
     void doBar() { value_.bar(); }
public:
    T value_;
};

class Foo
{
public:
    void bar();
};

void Foo::bar()
{
    std::cout << "Foo::bar()\n";
}

int main()
{
    MyTemplate<Foo> var;
    var.doBar();
    var.value_.bar();
}

BTW在Dobbs博士期刊中提醒过Swaine's Flames的任何其他老人?