我正在尝试为数组和指针开发一个具有不同行为的函数.可以通过部分特化来实现类,但它不适用于函数!
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的数组).
有没有办法解决它而不转向宏定义的阴暗面?
通过引用获取数组:
template< typename T >
void some_func( T *t ) { ... }
template< typename T, size_t N >
void some_func( T (&t)[ N ] ) { ... }
| 归档时间: | 
 | 
| 查看次数: | 123 次 | 
| 最近记录: |