提问者:小点点

无法从模板类型参数中删除volatile


在我的代码中,我有以下类(对于这个问题,显然有些简化):

template<typename T>
class MappedMemory
{
    private:
        T* localAddress;
    public:
        void* getGenericDataPointer()
        {
            return reinterpret_cast<void*>(localAddress);
        }
}

我将提供任何类型时,它不起作用-编译器将指出丢弃限定符。我能做些什么呢?我试过这样的方法:

void* getGenericDataPointer()
{
    auto normalAddress = const_cast<typename std::remove_cv<T*>::type>(localAddress); //To cast away volatile and const
    return reinterpret_cast<void*>(normalAddress);
}

null

error: reinterpret_cast from type ‘volatile unsigned int*’ to type ‘void*’ casts away qualifiers
             return reinterpret_cast<void*>(normalAddress);

共1个答案

匿名用户

您需要将特征应用于类型本身,而不是指向它的指针。

auto normalAddress = const_cast<typename std::remove_cv<T>::type*>(localAddress);

注意,删除了限定符,而只删除了后者。