Viv*_*han 11 c++ templates visual-c++ explicit-specialization
我有一个模板方法如下: -
template<typename T, int length>
void ProcessArray(T array[length]) { ... }
Run Code Online (Sandbox Code Playgroud)
然后我使用上面的方法编写代码: -
int numbers[10] = { ... };
ProcessArray<int, 10>(numbers);
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我必须明确指定模板参数.不能自动推断,以便我可以使用如下: -
ProcessArray(numbers); // without all the explicit type specification ceremony
Run Code Online (Sandbox Code Playgroud)
我确信我遗漏了一些基本的东西!备一把锤子!
R. *_*des 14
您不能按值传递数组.在功能参数T array[length]是完全一样的T* array.没有可供推断的长度信息.
如果你想按值获取数组,你需要类似的东西std::array.否则,您可以通过引用获取它,它不会丢失大小信息:
template<typename T, int length>
void ProcessArray(T (&array)[length]) { ... }
Run Code Online (Sandbox Code Playgroud)
您缺少正确的参数类型:数组只能通过引用传递:
template <typename T, unsigned int N>
void process_array(T (&arr)[N])
{
// arr[1] = 9;
}
double foo[12];
process_array(foo); // fine
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3684 次 |
| 最近记录: |