【发布时间】:2014-05-05 11:35:46
【问题描述】:
我需要一种在这两种类型的变量之间进行转换的方法:
std::array< const char*, 3 >* foo;
const char* foo[][3];
因为我需要能够将两种类型都传递给函数。该函数可以通过以下任何一种方式定义,以使转换更容易为准:
void bar( std::array< const char*, 3 >* param );
void bar( const char* param[][3] );
在this 问题中,Jarod42 建议使用here 方法。有没有更清洁的方法来做到这一点?
这个reinterpret_cast 确实对我有用,但Ivan Shcherbakov 将其描述为“丑陋的肮脏黑客”我已将代码粘贴在下面......我不明白为什么这是一个黑客,或者为什么会出错吗? Nathan Monteleone建议的模板方法一定比这个好吗?
void bar( std::array< const char*, 3 >* param ){}
void main( void )
{
static const char* cStyle[][3] = { NULL };
std::array< const char*, 3 > foo = { NULL };
std::array< const char*, 3 >* stlStyle = &foo;
bar( reinterpret_cast< std::array< const char*, 3 >* >( cStyle ) );
bar( stlStyle );
}
【问题讨论】:
-
我们可以知道您要在
foo中存储什么吗? -
我很确定这是重复的..
std::array的大小和对齐方式未指定 AFAIK,因此std::array<X,Y>*与X (*arr)[Y]不兼容 -
您说函数可以通过其中任何一种方式定义,但必须以其中一种方式定义?使用
template<class I> void bar(I start, I end),您可以将迭代器传递给这些容器中的任何一个,或者实际上是任何标准容器或 c 样式数组,或者只是容器的一部分。 -
dyp,我认为关键是没有指定对齐方式,是的,两个版本的 foo 应该完全兼容。黑色,该变量将包含 3 个动态分配的 c 字符串数组。
标签: c++ arrays dynamic-arrays