LxL*_*LxL 1 c++ templates c++11
我正在编写一个计算多维向量元素的函数
template<class T>
int real_size(const std::vector<T>& vec)
{
int size=0;
for(const auto& v : vec)
{
if(std::is_integral<T>::value ||
std::is_floating_point<T>::value){
size+=1;
}
else{
size +=real_size(v);
}
}
return size;
}
int main()
{
std::vector<std::vector<int>> a(10);
a[0]=std::vector<int>(10);
std::cout<<real_size(a);
}
Run Code Online (Sandbox Code Playgroud)
哪给我这些错误:
error: no matching function for call to 'real_size(const int&)'
size +=real_size(v);
^
Run Code Online (Sandbox Code Playgroud)
这段代码看起来很好,错误也无关紧要...... else语句永远不会成为size +=real_size(int);因为我正在检查模板参数的类型std::is_integer.
但似乎编译器在编译时无法理解它!它是编译器错误还是我犯了错误?
*我正在使用gcc 4.8.1.g ++ -std = c ++ 11*
如果用实际值替换常量,可以看到编译错误是如何产生某种意义的.因为int,该代码等同于以下内容:
if(true || false){
size+=1;
}
else{
size +=real_size(v);
}
Run Code Online (Sandbox Code Playgroud)
这里编译器仍会抱怨else主体无效:死代码仍然必须是有效代码.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |