受此答案的启发,我将以下解决方案用于只读成员变量:
template <class T, class OWNER>
class readonly
{
friend OWNER;
public:
explicit readonly(const T &t) : m_t(t)
{
}
~readonly()
{
}
operator const T&() const
{
return m_t;
}
private:
T& operator =(const T &t)
{
m_t = t;
return m_t;
}
T m_t;
};
效果很好,为了稍微优化性能,我这样使用它:
class A
{
public:
A()
{
}
~A()
{
}
#ifdef _DEBUG // DON'T USE THIS SWITCH, SEE ANSWERS BELOW!
readonly<int, A> m_x, m_y;
#else
int m_x, m_y;
#endif
};
但是,我很想消除检查我们是否在进行调试或发布构建的预编译器开关......有没有人看到使用宏或聪明的模板技巧的解决方案?
编辑:我已经在一个循环中检查了性能,它使用 VS2010 会产生大约 15~20% 的开销。它不会产生相同的代码,启用自动内联。
编辑#2:我创建了一个单元测试,消除了所有其他的东西。我已经没有性能损失了,太好了,毕竟没有问题。谢谢您的帮助!而且我已经修复了构造函数,很好的调用。