c++ - 从模板调用类保护方法

标签 c++ templates protected

我想要一个可以访问其类型名参数的 protected 方法的模板。我怎样才能让它发挥作用?

例如:

class Foo{
   ...
   protected:
     int Bar();
}

template <class T> FooTempl{
   ...
   int SomeMethod(T* ptr) { return ptr->Bar();};
   ...
}

原因是我希望方法 Foo::Bar() 可以被模板访问,但不能被任何其他外部调用者访问。我希望那里有一些 friend 语法可以让它工作......

最佳答案

FooTempl 声明为 Foo 的友元的替代方法是让前者派生自后者。在这种情况下,由于 FooFooTempl 的基类,因此 FooTempl::SomeMethod 不需要 Foo * 参数了。

class Foo
{
   protected:
     int Bar() { return 42; }
};

template <class T> 
class FooTempl : public T
{
public:
   int SomeMethod() { return T::Bar();}
};

int main()
{
  FooTempl<Foo> bar;

  bar.SomeMethod();
}

哪种方法更合适取决于您的用例。

关于c++ - 从模板调用类保护方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990223/

相关文章:

c++ - 我的家庭作业代码中的计算有误。怎么修?

javascript - 如何使用 javascript 和模板构建 DOM?

c++ - 浮点类型作为 C++20 中的模板参数

objective-c - @protected 在 Objective-C 中

C++ 为什么要使用公共(public)、私有(private)或保护继承?

c++ - GaussianBlur 不应该是对称的吗?

c++ - 访问父类对象集合成员的子类函数

c++ - 在派生类中使用指令将继承更改为 Public

c++ - std::unique_lock<std::mutex> 还是 std::lock_guard<std::mutex>?

python - 如何在模板的 url 函数上使用 urlize 过滤器?