在单个函数中使用多个转换类型(c 重载解决方法)
Using multiple casting types in single function (c overloading workarounds)
C 程序员试图克服 Python 这里。
我发现自己多次违反 DNY 规则,我想知道是否有办法将未知类型传递给函数并对其进行操作并动态更改其类型。目前,我有:
static void ArrayFunction( void *one, void *two, uint8_t size )
{
// Get the array lengths.
if ( size == sizeof( uint8_t ) )
{
uint8_t *One = one;
uint8_t *Two = two;
}
if ( size == sizeof( uint16_t ) )
{
uint16_t *One = one;
uint16_t *Two = two;
}
if ( size == sizeof( uint32_t ) )
{
uint32_t *One = one;
uint32_t *Two = two;
}
for ( i = 0; i < MAX_BUSES; i++ )
{
// Do something with the arrays.
One[i] = Two[i];
// Lots more code here. Maybe hundreds of lines.
}
}
如您所知,此代码无法编译,因为立即定义的两个变量超出范围。我想传入一个长度为 8、16、32 等的数组,无论如何都要用它做点什么。我知道我不能只使用 void 指针,因为当使用不同的整数类型时数组长度不同。如果我将 for 循环复制到每个 if 语句中,我将得到完全相同代码的三个副本。在 C 中做这件事是不是太复杂了,或者是否有一种解决方法可以减少我必须复制和粘贴的次数?谢谢!
在您现在展示的情况下,一个简单的 memcpy
和适合整个数组的大小就可以了。
如果你真的想在不重复代码的情况下做更复杂的事情,你可以用宏封装你的代码,然后在if
s中重复调用。
您无能为力,C 不是动态类型的。
顺便说一句,在 C 中,您通常会使用 switch
而不是几个 if
。
C 程序员试图克服 Python 这里。 我发现自己多次违反 DNY 规则,我想知道是否有办法将未知类型传递给函数并对其进行操作并动态更改其类型。目前,我有:
static void ArrayFunction( void *one, void *two, uint8_t size )
{
// Get the array lengths.
if ( size == sizeof( uint8_t ) )
{
uint8_t *One = one;
uint8_t *Two = two;
}
if ( size == sizeof( uint16_t ) )
{
uint16_t *One = one;
uint16_t *Two = two;
}
if ( size == sizeof( uint32_t ) )
{
uint32_t *One = one;
uint32_t *Two = two;
}
for ( i = 0; i < MAX_BUSES; i++ )
{
// Do something with the arrays.
One[i] = Two[i];
// Lots more code here. Maybe hundreds of lines.
}
}
如您所知,此代码无法编译,因为立即定义的两个变量超出范围。我想传入一个长度为 8、16、32 等的数组,无论如何都要用它做点什么。我知道我不能只使用 void 指针,因为当使用不同的整数类型时数组长度不同。如果我将 for 循环复制到每个 if 语句中,我将得到完全相同代码的三个副本。在 C 中做这件事是不是太复杂了,或者是否有一种解决方法可以减少我必须复制和粘贴的次数?谢谢!
在您现在展示的情况下,一个简单的 memcpy
和适合整个数组的大小就可以了。
如果你真的想在不重复代码的情况下做更复杂的事情,你可以用宏封装你的代码,然后在if
s中重复调用。
您无能为力,C 不是动态类型的。
顺便说一句,在 C 中,您通常会使用 switch
而不是几个 if
。