template<typename T>class CConstraint{public: CConstraint() { } virtual ~CConstraint() { } template <typename TL> void Verify(int position, int constraints[]) { } template <> void Verify<int>(int, int[]) { }};在g ++下编译它会产生以下错误:非命名空间范围'class CConstraint'中的显式特化在VC中,它编译得很好。任何人都可以让我知道解决方法吗?
3 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
解决它的另一种方法是委托私有函数并重载该函数。这样,您仍然可以访问*this外部模板参数类型的成员数据。
template<typename T>
struct identity { typedef T type; };
template<typename T>
class CConstraint
{
public:
template <typename TL>
void Verify(int position, int constraints[])
{
Verify(position, constraints, identity<TL>());
}
private:
template<typename TL>
void Verify(int, int[], identity<TL>)
{
}
void Verify(int, int[], identity<int>)
{
}
};
- 3 回答
- 0 关注
- 626 浏览
添加回答
举报
0/150
提交
取消