我不熟悉模板,但我想知道是否可以将它们用于 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/