c++ - 使用模板公开私有(private) Typedef

标签 c++ templates typedef

我有一个包含私有(private) typedef 和几个成员的类 功能:

class Foo
{
private:
  typedef std::blahblah FooPart;
  FooPart m_fooPart;
  ...
public:
  int someFn1();
  int someFn2();
};

几个成员函数需要以类似的方式使用 m_fooPart,所以我 想把它放在一个函数中。我将辅助函数放在匿名中 命名空间,但在这种情况下,他们需要知道什么 FooPart 是。所以,我这样做了:

namespace
{
  template <typename T>
  int helperFn(const T& foopart, int index)
  {
    ...
    return foopart.fn(index);
  }
}

int Foo::someFn1()
{
  ...
  return helperFn(m_fooPart, ix);       
}

通过强制编译器生成 FooPart 类型,我是否仍然处于 定义明确的行为之地?有没有更优雅的方式 完成这个不会增加 Foo 的大小或公开 什么是私有(private)的?

最佳答案

是的,这种方法会产生定义明确、符合标准的行为。

就是说,向类中添加成员函数不会增加类的大小(假设您指的是 sizeof 运算符的结果),所以我不确定您认为有什么缺点只是让辅助函数成为 Foo 的私有(private)成员。

关于c++ - 使用模板公开私有(private) Typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491893/

相关文章:

java - 在 Java 程序中通过 UDP 接收 C++ 字节流

c++ - 如果 `this` 不是 const,为什么我不能修改它?

c++ - RVO、移动操作和困境

c - 函数指针 typedef 的前向声明

objective-c - Objective-C - "typedef"什么时候应该在 "enum"之前,什么时候应该命名枚举?

c++ - 在 QList 中添加一个 QVector

c++ - 在固定模板参数的同时扩展模板类

c++ - 传递给模板函数的可变参数模板

c++ - 仅适用于智能指针的模板

c - 执行 typedef 时初始化结构数组