c++ - 函数对数组和指针的不同行为

标签 c++ templates

我正在尝试为数组和指针开发具有不同行为的函数。 它可以通过部分特化为类实现,但它不适用于函数!

int i = 0;
some_func( &i ); // pointer
int arr[ 3 ] = { 0 };
some_func( arr ); // array

在第二种情况下,函数some_func 的参数类型是int*,而且没有办法查明,它实际上是int[3].

另一方面,如果我使用类模板特化,我必须明确指定数组类型:

template< typename T >
struct S
{
  static void some_func( T t ) { ... }
};

template< typename T, size_t N >
struct S< T[ N ] >
{
  static void some_func( T t[ N ] ) { ... }
};

// ...............

int arr[ 3 ] = { 0 };
S< int[ 3 ] >::some_func( arr ); // Works,
// but specifying type explicitly is not convenient

目前我已经用宏定义解决了这个问题(准确地说,我只需要对数组进行精确的sizeof)。

有没有什么办法可以在不转向宏定义的阴暗面的情况下解决?

最佳答案

取数组by reference :

template< typename T >
void some_func( T *t ) { ... }

template< typename T, size_t N >
void some_func( T (&t)[ N ] ) { ... }

关于c++ - 函数对数组和指针的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17836248/

相关文章:

c++ - 为什么字符串不会出现左操作数所需的错误左值?

c++ - 特殊模板函数的作用

HTML 输出被解释为纯文本而不是被接收为 html

c++ - 这是模板的正确行为吗?

c - 用于 C 模板仿真的 Doxygen

c++ - std::hash 是否保证在 stdlib 发行版中相同

c++ - C++11 标准是否保证零值有符号整数的一元减为零?

c++ - 这个 typedef 语句中的语法是做什么的?

c++ - 查找 vector<string> 中的所有元素是否都在字符串中

javascript - JQuery 模板 : How to preserve backslashes in content?