【发布时间】:2015-01-23 00:50:57
【问题描述】:
我正在尝试在 C++ 中实现 D 语言关键字 inout 的语义(只是为了好玩)。
根据上下文,它基本上说的是两件事之一:
- “此函数的结果将具有与其参数之一相同的常量。”
- “此成员函数的结果将与您调用它的实例具有相同的常量。”
在编写 begin 和 end 等成员函数时很有用。
我能够相对轻松地创建第一个案例的有效实现(尽管界面肯定不漂亮):http://ideone.com/wgaDJJ
然而,根据我的最佳猜测,第二个似乎是不可能的。当您使用模板时,您只能获得这种“自动 const 重载生成”,但据我所知,您不能对“this”参数进行模板化。特别是,您会注意到此代码不工作/编译:http://ideone.com/W4fTa4
想知道:
- 我错过了什么吗?是否可以在不借助宏或重复代码的情况下实现第二种情况?
- 有人知道是否有关于此主题的 WG21 标准提案吗? (不一定是
inout,只要是关于主题的任何内容) - 处理此问题的行业标准是什么? (这是我正在玩弄的一个可能不那么糟糕的选择:http://ideone.com/PW0vK4)
【问题讨论】:
-
IMO 的行业标准是复制函数,从非常量调用 const 一,然后 const_cast 解决问题。它只是简单的损坏,绝不可接受。需要一种语言机制。
-
对于方法,您必须为
this显式添加const,而对于参数,可以在模板中推断出常量。