【问题标题】:c++: implement write_padding functionc++:实现write_padding函数
【发布时间】:2013-11-04 17:56:30
【问题描述】:

可能有人问过以下问题,但我找不到。

我创建了一个类BinaryWriter
我需要实现以下方法:

  /// Write zero bytes to file
  virtual void wr_padding( int padding_size); 

我有以下实现:

void BinaryWriter::wr_padding( int padding_size)
{
  char pad_arr[padding_size];
  memset(pad_arr, 0, padding_size);
  m_stream.write(pad_arr,padding_size);
}

地点:

   std::ostream m_stream; 

我对这个实现不满意。我希望有一个 ios API 来完成这个简单的任务。有更多的原生实现吗?

谢谢

【问题讨论】:

  • 那甚至不是有效的 C++...
  • 什么是无效的?请详细说明..
  • 看看这个答案(How to write 'n' copies of a character to ostream):stackoverflow.com/a/11421715/808101
  • @DannyElly C 样式数组的维度必须是常数。
  • 这是正确的。但奇怪的是,这段代码可以编译并运行。

标签: c++ padding ofstream


【解决方案1】:

首先,您的代码无效; C 样式数组的大小必须 成为一个常数。一个有效的版本是:

void
BinaryWriter::wr_padding( int padding_size)
{
  std::vector<char> pad_arr( padding_size );
  m_stream.write( &pad_arr[0], pad_arr.size() );
}

但是:您可以为padding_size 设置一些最大值吗? (在 XDR,例如,它永远不会超过 4。)如果是这样, 像这样简单的东西:

void
BinaryWriter::wr_padding( int padding_size )
{
    static char const pad_arr[ max_padding_size ] = {};
    m_stream.write( pad_arr, padding_size );
}

会成功的。

【讨论】:

  • 这是有效的 C++,如果你没有使用旧的编译器...在 C 中你可以在 c99 中做到这一点
  • @benjarobin c99 != C++。这不是有效的 C++,句号。
  • @benjarobin 它是有效的 C99,但它不是有效的 C++。
  • @jrok 你是对的,如果未指定 -pedantic,gcc/g++ 允许它:我的错
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 2011-09-02
  • 2012-04-29
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
相关资源
最近更新 更多