在单独的类中引用类型时出现编译器错误

时间:2019-02-24 23:30:42

标签: c++ oop visual-c++ crtp

我正在C ++中定义3个类,并试图最大程度地利用奇怪的重复模板模式(CRTP)。我正在使用VS2017。

代码:

`

template<typename Outer>
class OuterClass <Outer, uint32_t> {
    using datatype = uint32_t;

static uintptr_t GetAddr(void const volatile* const ptr) {
            auto const addr1 =            get_addr();
            auto const addr_virtual =     ptr;
            auto const baseAddr =         Outer::base_addr;
            uintptr_t const addressCalcd = uintptr_t(baseAddr) + uintptr_t( addr_virtual - addr1 );
        return addressCalcd;
    };
};

template<typename Outer>
class OuterClass <Outer, uint64_t> {
    using datatype = uint64_t;

static uintptr_t GetAddr(void const volatile* const ptr) {
            auto const addr1 =            get_addr();
            auto const addr_virtual =     ptr;
            auto const baseAddr =         Outer::base_addr;
            uintptr_t const addressCalcd = uintptr_t(baseAddr) + uintptr_t( addr_virtual - addr1 );
        return addressCalcd;
    };
};

template<typename Inner, typename Outer>
struct InnerClass {

    GetAddVal CastVl()  const volatile { 
    uint32_t addrl = uint32_t(Outer::GetAddr(static_cast<const volatile R*>(this)));
        return VAL_CAST{ addrl };
    }
    operator Outer::datatype() const volatile {
        return RegBlock<Outer, Outer::datatype>::readReg(*this);
    }
    operator Outer::datatype() const {
        return RegBlock<Outer, Outer::datatype>::readReg(*this);
    }
    void operator=(Inner const  & x) volatile;
    void operator=(const Outer::datatype x) volatile;
};

错误在InnerClass中。首先,

uint32_t addrl = uint32_t(Outer::GetAddr(static_cast<const volatile R*>(this)));

很好。我可以引用静态类Outer :: GetAddr没问题。

但是,我不能引用typedef

operator Outer::datatype() const volatile {

错误:C2833“操作员限定名”未被识别为操作员或类型

这也是错误:

void operator=(const Outer::datatype x) volatile;

C2805二进制“运算符=”参数太少。

为什么我可以使用::而不是typedef'd引用静态类?我应该考虑在“外部类”中嵌套“内部类”吗?理想情况下,我根本不需要嵌套类。

0 个答案:

没有答案