2

我正在使用泛型实现一个智能指针类,我想强制这个类的用户使用语法正确构造智能指针,例如

 MyReference<TestCls>(mytest3))

或者

MyReference<TestCls> mytest4(new TestCls());

所以我在 CTOR 上使用了显式关键字来防止这种情况:

MyReference aRef = NULL;

然而,由于我无法控制的不幸情况,我正在处理使用古老的 MSVC++ 4.1 编译器编译的代码。包含显式关键字时出现以下错误:

MyReference.h(49):错误 C2501:“显式”:缺少 decl 说明符
MyReference.h(51):错误 C2143:语法错误:缺少“;” ''
MyReference.h(52) 之前:错误 C2238:':'
MyReference.h(52) 之前的意外标记:错误 C2059:语法错误:'int 常量'

当我添加一个#define explicit这些错误消失。这是我的一个黑客,只是为了让编译器忽略关键字。我猜这意味着 yon olde 编译器不支持显式。有人可以确认这一点吗?是否有人知道解决方法?

谢谢Beaucoups,丹尼斯。

4

1 回答 1

2

这个网站有一个解决方法,即:

不幸的是,较旧的编译器可能不支持使用“显式”,这可能会让人头疼。如果您一直在使用过时的编译器并且无法获得对 C++ 标准的更好支持的编译器,那么您最好的解决方案可能是利用这样一个事实,即对于给定的值。您可以通过使用隐式创建每种类型的对象的中间类来利用这一点,然后让您的主类从该类隐式创建对象:

class proxy
{
    public:
    proxy(int x) : x(x) {} ;
    getValue() { return x; }

    private:
    int x;

};

class String
{
    // this will be equivalent of explicit
    String(proxy x) { /* create a string using x.getValue(); */ }
}
于 2010-11-30T18:49:57.817 回答