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