c++ - setter 和 getter 的模板

标签 c++ templates setter getter

我不熟悉模板,但我想知道是否可以将它们用于 setter 和 getter 方法。例如在这种情况下:

double exmlClass::getA(void) const
{
    return a_;
}



void exmlClass::setA(const double& a)
{
    a_ = a;
}



double exmlClass::getB(void) const
{
    return b_;
}

如您所见,方法几乎相同,只是它们引用了另一个私有(private)变量(a_、b_、c_)。有没有更优雅的方法来编写这些函数,或者在这种情况下像上面那样做是常见的做法?如果模板的使用很普遍,我将不胜感激您将如何在上面的代码中使用它们的示例。

我要问的另一个问题是应该如何正确声明 getter 和 setter。它是好的编码风格吗?

double getA(void) const;
void setA(const double& a);

double getB(void) const;
void setB(const double& b);

double getC(void) const;
void setC(const double& c);

我的意思是 getter 应该始终是 const,而 setter 应该将对对象的引用作为参数引用,而不是复制它,这样可能会慢一点?

最佳答案

向反对者致敬!

Boost.Fusion.Map是您正在寻找的基础。

namespace result_of = boost::fusion::result_of;

class MyClass
{
public:
  struct AType {};
  struct BType {};
  struct CType {};

  template <typename Type>
  typename result_of::at< DataType, Type >::type &
  access(Type) { return boost::fusion::at<Type>(mData); }

  template <typename Type>
  typename result_of::at< DataType, Type >::type const &
  get(Type) const { return boost::fusion::at<Type>(mData); }

  template <typename Type>
  void set(Type, typename result_of::at< DataType, Type >::type const & v)
  {
    boost::fusion::at<Type>(mData) = v;
  }

private:
  typedef boost::fusion::map <
    std::pair<AType, int>,
    std::pair<BType, std::string>,
    std::pair<CType, float> > DataType;
  DataType mData;
};

关于c++ - setter 和 getter 的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195100/

相关文章:

c++ - 将使用 QML、QBS 构建的 Qt 应用程序部署到 Windows

c++ - 如何比较容器和初始化列表以查看它们是否相等?

c++ - 存在用户定义的移动构造函数/赋值时的隐式复制构造函数

c++ - 如何一次专门化多种类型的方法

c# - 从 C# 调用 C++ 模板函数

c++ - 仅用于代理目的的组合对象与哪种设计模式相关?

c++ - 用于函数调用的带有可变参数模板的模板类型推导

java - 如何使用 Listener 将字符串传递给另一个类

objective-c - 只读 socket ?

使用或不使用的 PHP Getters/Setter