0

我正在处理一个模板,它非常简单。这是当前的结构:

//primary template
template<typename T> 
const T bit_cast(const BitExpr* p);    

//specialization
template<> 
inline const BitBinExpr* bit_cast<BitBinExpr*>(const BitExpr* p) {
    if (p->type == XOR || p->type == AND)
        return static_cast<const BitBinExpr*>(p);
    return nullptr;
}
// more specializations follow

但 Visual Studio 坚持认为这是无效的。但是,当参数和返回类型不是 const时,这工作得很好。如何说服 VS 接受此代码?

4

1 回答 1

2

这似乎最近出现了很多。这两种类型不一样

const BitBinExpr* // BitBinExpr is constant

typedef BitBinExpr* T;
const T           // pointer is constant

也许这就是你要找的

template<typename T> const T bit_cast(const BitExpr* p);    
template<> inline const BitBinExpr *const bit_cast<const BitBinExpr *const>(const BitExpr* p) {
    if (p->type == XOR || p->type == AND)
        return static_cast<const BitBinExpr*>(p);
    return nullptr;
}
于 2012-08-05T06:11:01.640 回答