此代码将失败并显示错误消息(行号已关闭)。我该如何解决这个问题(保持相同的意图)?
g++ -o c_test c_test.cpp
c_test.cpp:在函数'int main(int,char**)'中:
c_test.cpp:28:18: 错误: 没有匹配函数调用'wcalc(CWrapped<5>::u_type&)'
c_test.cpp:28:18: 注意:候选人是:
c_test.cpp:17:58: 注意:模板 int wcalc(typename CWrapped::u_type)
包装的类型被传递给“calc”和“wcalc”函数,但第二个失败了。我希望能够包装类型,以便我可以使用编译时定义来指定不同的类型,但仍然使用相同的包装函数
// Example template class
template <int T_B>
class m_int {
public:
int x;
m_int() { x = T_B; }
int to_int() { return(x); }
};
// Desired Typedef wrap
template <int T_BITS> struct CWrapped {
typedef m_int<T_BITS> u_type;
};
// This is ok, no wrapping
template <int T_BITS> int calc(m_int<T_BITS> x) {
return(x.to_int());
}
// This fails when instantiated
template <int T> int wcalc(typename CWrapped<T>::u_type x) {
return(x.to_int());
}
int main(int argc, char* argv[]) {
CWrapped<5>::u_type s;
int x = calc(s);
int y = wcalc(s);
return(0);
}