我正在使用一个库来公开一个可以使用的接口.这个库的一个功能是这样的:
template <int a>
void modify(){}
Run Code Online (Sandbox Code Playgroud)
我必须修改从1到10的参数,即modify使用模板参数从1到10 调用.为此,我编写了这段代码(代码的基本版本,实际代码要大得多).
for(int i=0; i<10; i++){
modify<i>();
}
Run Code Online (Sandbox Code Playgroud)
在编译时,我收到以下错误
error: 'i' cannot appear in constant-expression
Run Code Online (Sandbox Code Playgroud)
通过互联网上的一些链接后,我开始知道我不能传递任何值作为模板参数,这在编译时不会被评估.我的问题如下:1.为什么i编译时无法编译评估?2.还有其他任何方法可以实现我想要在不改变API接口的情况下实现的目标吗?
还有一件事我想做.调用修改为修改,其中VAR是某些功能计算的输出.我怎样才能做到这一点?
我正在学习c ++模板概念.我不明白以下几点.
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
T fun(T& x)
{
cout <<" X is "<<x;
cout <<"Type id is "<<typeid(x).name()<<endl;
}
int main ( int argc, char ** argv)
{
int a[100];
fun (a);
}
Run Code Online (Sandbox Code Playgroud)
我在尝试什么?
1)T fun(T&x)
这里x是一个引用,因此不会将'a'衰减为指针类型,但在编译时,我收到以下错误.
error: no matching function for call to ‘fun(int [100])’
Run Code Online (Sandbox Code Playgroud)
当我尝试非引用时,它工作正常.据我所知,数组被衰减为指针类型.