涉及const时无法专门化模板

时间:2012-08-05 05:48:51

标签: c++ visual-c++

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

//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接受此代码?

1 个答案:

答案 0 :(得分: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;
}