有没有办法为C ++ 03实现auto关键字

时间:2014-02-24 21:36:08

标签: c++

在C ++ 03或更早版本中,有没有办法实现auto关键字?不是对象类,而是可以像[C ++ 11]

那样使用它
auto x = 5;
std::cout << x;

我很快'掀起'了一个实现,但它很垃圾,因为你可以将它转换为任何类型 - 太像object类,而且非常基本,我知道,但无论如何,在这里它是:

class auto_t
{
public:
    template < typename _Ty > auto_t(const _Ty &_Value)
        : __data(_Value)
    {
    }

    template < typename _Ty >  operator _Ty()
    {
        return (_Ty)__data;
    }
private:
    void *__data;
};

#define auto auto_t

3 个答案:

答案 0 :(得分:3)

不是真的。这就是为什么C ++ 11将其作为关键字引入,而不是库功能。

答案 1 :(得分:1)

除了编写一个检查预期类型的​​编译器并为您创建适当的代码之外,我无法想到做任何你想做的事情。

这是一种语言功能,因此由编译器实现。

答案 2 :(得分:1)

无法使用相同的语法模拟C ++ 11自动功能。您提供的代码引入了一种新类型,它只是试图包装您的原始类型(忽略它实际上不保留原始对象的生命周期的事实)。但是,这种新类型遵循与参数相关的查找和类型转换的相同规则作为原始类型。 C ++ 11中的auto关键字是一种语言功能,而不是库扩展。您可以做的最好的模仿方法是使用像boost library那样的MACRO。