2011-05-18 60 views
4

假设我正在编写一个返回某种代理对象的函数,比如懒惰评估或其他目的。如果我写这样影响自动类型扣除

auto x = func(); 

代码,然后x将返回值的类型 - ,我想代理对象的类型。是否可以更改autodecltype,以便在这种情况下使用它们将返回我想返回的实际结果,而不是代理对象本身的类型?

+2

不是我所知道的。我看到至少有两个针对“operator auto()”转换操作符的建议,用于在这种情况下触发转换。但没有人为此写出严肃的建议。 – sellibitze 2011-05-20 11:24:49

+0

我无法看到你需要这个。要么你想要真正的代理类型(如一些表达式模板,然后你会很高兴使用'auto'),或者转换的结果。在后一种情况下,你可以拼出类型(或'typedef'),就像我们在C++ 03中所做的那样。您是否有一个特别的例子来说明这样的功能会带来明显的优势? – 2012-05-21 19:30:47

回答

3

随想:

您可以通过使用decltype(*func()),但还是被代理对象访问可能取得的代理对象的类型。除了通常的const,&等,auto没有修饰符。

如果它是一个懒惰的评估,你可能不想现在最终的对象类型,是吗?

如果代理服务器有最终对象的中心运算符,那么auto怎么知道它应该被使用?如果有多个呢?

0

为什么不在func()里面输入你想返回的东西?