我正在尝试为数组和指针开发一个具有不同行为的函数。它可以通过部分特化为类实现,但它不适用于函数!
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
的数组)。
有什么方法可以在不转向宏定义的阴暗面的情况下解决它?