我正在处理模板,这非常简单。这是目前的结构:
//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接受此代码?
答案 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;
}